精华内容
下载资源
问答
  • 创建preparedstatement
    千次阅读
    2019-05-05 11:47:55
    1.根据测试占位符?不能用于表名
    String strSql="SELECT * FROM ?";
    try(PreparedStatement ps=conn.prepareStatement(strSql)) {
        ps.setObject(1,"person");

    会提示语法错误

    Exception in thread "main" java.lang.RuntimeException: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''person''

     

    2.占位符?用于其它变量名时,执行正常

    String strSql="SELECT * FROM person WHERE name =?";
    try(PreparedStatement ps=conn.prepareStatement(strSql)) {
        ps.setObject(1,"张三");
        ResultSet rs=ps.executeQuery();

    欢迎指正

    更多相关内容
  • JDBC之创建PreparedStatement

    千次阅读 2019-04-14 17:19:57
    JDBC之创建PreparedStatement创建PreparedStatement动态传参PreparedStatement vs Statement通过PreparedStatement执行sql语句 创建PreparedStatement 通过调用 Connection 对象的 preparedStatement() 方法获取 ...

    创建PreparedStatement

    通过调用 Connection 对象的 preparedStatement() 方法获取 PreparedStatement 对象;PreparedStatement 接口是 Statement 的子接口,它表示一条预编译过的 SQL 语句。

    Java代码:

    	String sql = "update user set name=? where id=?";
    	PreparedStatement statement = connection.prepareStatement(sql);
    

    动态传参

    PreparedStatement 对象所代表的 SQL 语句中的参数用问号(?)来表示;调用 PreparedStatement 对象的 setXxx() 方法来设置这些参数;setXxx() 方法有两个参数,第一个参数是要设置的 SQL 语句中的参数的索引(从 1 开始),第二个是设置的 SQL 语句中的参数的值;其中Xxx指的是数据类型。

    	String sql = "update user set name=? where id=?";
    	PreparedStatement statement = connection.prepareStatement(sql);
    	statement.setString(1, "jackma");
    	statement.setLong(2, 1);
    

    PreparedStatement vs Statement

    PreparedStatement可以防止SQL注入攻击;并且PreparedStatement会对SQL语句进行预编译,再次执行相同的语句不需要再次进行编译,可以提高执行效率。

    通过PreparedStatement执行sql语句

    	//获取数据库连接
    	Connection connection = JDBCTools.getConnection();
    	//创建preparedStatement
    	String sql = "update user set name=? where id=?";
    	PreparedStatement statement = connection.prepareStatement(sql);
    	//填充占位符参数
    	statement.setString(1, "jackma");
    	statement.setLong(2, 1);
    	//执行更新语句
    	int affectedRows = statement.executeUpdate();
    
    展开全文
  • 主要介绍了JSP中的PreparedStatement对象操作数据库的使用教程,文中举了一些使用PreparedStatement预处理语句对象进行MySQL增删查改的例子,需要的朋友可以参考下
  • 二、创建PreparedStatement对象三、带参数的SQL语句2.读入数据总结 前言 这里大概整理一下对于PreparedStatement的理解 一、为什么选择PreparedStatement? Statement对象在每次执行SQL语句时都将该语句传给数据库...

    前言

    这里大概整理一下对于PreparedStatement的理解


    一、为什么选择PreparedStatement?

    Statement对象在每次执行SQL语句时都将该语句传给数据库。这样,多次执行同一个语句时效率较低。为了提高语句的执行效率,可以使用PreparedStatement接口对象。

    二、创建PreparedStatement对象

    使用PreparedStatement对象可以将SQL语句传给数据库做预编译,以后每次执行这个SQL语句时,速度就可以提高很多。另外,PreparedStatement对象还可以创建带参数的SQL语句,在SQL语句中指出接受哪些参数,然后进行预编译。
    创建PreparedStatement对象使用Connection接口的preparedStatement()方法。与创建statement对象不同的是,这里需要给该方法传递一个SQL命令。

    Connection接口中的preparedStatement()方法:
    Connection接口中的preparedStatement()方法

    三、带参数的SQL语句

    PreparedStatement对象通常用来执行带参数的SQL语句,使用问好(?)作为占位符。

    • eg:String sql = “insert into user values (?,?,?)”;
      PreparedStatement pstmt = conn.preparedStatement(sql);

    通过API中的setXXX方法对参数进行设置。如:
    public void setInt(int parameterIndex, int x);
    public void setString(int parameterIndex, String x);
    代码如下(示例)

    	public static void main(String[] args) {
    		String sql = "insert into user values (?,?,?)"; 
    		int user_id = 10;
    		String user_name = "Chern";
    		String user_pwd = "gfwgfyw";
    		update(sql, user_id,user_name,user_pwd);
    	}
    	
    	public static void update(String sql,Object ... args){
    			Connection conn = null;
    			PreparedStatement ps = null;
    			try {
    				conn = JDBCUtils.getConnection();
    				ps = conn.prepareStatement(sql);
    				for(int i = 0;i < args.length;i++){
    					ps.setObject(i + 1, args[i]);
    				}
    				ps.execute();
    			} catch (Exception e) {        
    				e.printStackTrace();
    			}finally{
    				JDBCUtils.closeResource(conn, ps);
    			}
    	}
    

    JDBC.class:

    public static Connection getConnection() {
    		Connection conn = null;
    		String url = "jdbc:mysql://127.0.0.1/Test?characterEncoding=UTF-8";
    		String user = "Test";
    		String pwd = "123";
    		try {
    			Class.forName("com.mysql.cj.jdbc.Driver");
    			conn = DriverManager.getConnection(url, user, pwd);
    		}catch(ClassNotFoundException e) {
    			e.printStackTrace();
    		}catch(SQLException e) {
    			e.printStackTrace();
    		}
    		return conn;
    	}
    	
    	public static void closeResource(Connection conn,PreparedStatement pstmt) {
    		try {
    			pstmt.close();
    			conn.close();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    
    展开全文
  • PreparedStatement接口继承Statement接口,PreparedStatement接口比statement接口使用起来更加灵活,更加有效率

    为什么使用PreparedStatement接口?

    我们使用Statement接口有一个缺点。我们在精心设计内容时,用户名和密码都是错误的时候也可以登录成功比如输入密码的时候 12 ‘or’1‘=‘1;这样就会登录成工。这就是典型的sql注入攻击。原因是在使用Statement接口方式要进行SQl语句的拼接不仅麻烦,容易出错,还存在安全漏洞。而在使用PreparedStatement接口就不存在这个问题,PreparedStatement接口的优点还不仅如此后面会比较一下PreparedStatement接口和statement接口的区别。

    使用PreparedStatement更新信息

    我们上面说了PreparedStatement接口的优点,在使用之前我们先了解以下方法。

    方法名称作用
    boolean exectute()在此PreparedStatement对象中执行SQL语句,该语句可以是任何SQL语句。如果是Result对象,则返回true,如果是更新计数或没有结果,则返回false
    ResultSet executeQuery()在此PreparedStatement对象中执行SQl查询,并返回查询生成的ResultSet对象
    int executeUpdate()在此PreparedStatement对象中执行SQL语句,该语句必须是一个DML语句,如INSERT,UPDATE或DELETE语句;或者是无法返回内容的SQl语句,如DDL语句。返回值是执行该操作所影响的行数
    void setInt(int index,int x)将指定参数设置给定JAva int值。设置其他类型参数的方法于此方法类似,如setFloat(int index,float x),setDouble(int index,double x)等
    void setObject(int index,Object x)使用给定设置指定参数的值

    使用PreparedStatement接口数据库的进本步骤有三步。

    (1)创建PreparedStatement对象
    通过Connection接口的PreparedStatement(String sql)方法创建PreparedStatement对象,SQl语句可具有一个或多个输入参数。这些输入参数的值在SQL语句创建时未被指定,而是每个输入参数保留一个问号(“?”)作为占位符。
    以下的代码段(其中conn是Connection对象)将创建包含带有三个输入参数的SQl语句的PreparedStatement对象。

    PreparedStatement pstmt=con.prepareStatement("Update dog set health=?,love=? where id=?");
    

    (2)设置每个输入参数的值
    通过调用setXXX()方法来完成,其中xxx是该参数相应的类型。例如,若参数是String类型,则使用的方法是setString()。setXxx()方法的第一个参数是要设置参数的序数位置(从1开始计数),第二个参数是设置给该参数的值。例如,以下代码将第一参数设置为整数型值80,第二个参数设置为整形值15,第三个设置为整形值1.

    pstmt.setInt(1,80);
    pstmt.setInt(2,15);
    pstmt.setInt(3,1);
    
    

    3)执行SQl语句
    在设置个各个输入参数的值后,就可以调用PreparedStatement接口的三个执行方法(ResultSet executeQuery(),int executeUpdaye(),boolean execute())之一来执行SQL语句。
    注意这三个执行方法和Statement接口中三个方法名称相同,作用相同,但是不需要SQL语句做参数,SQL语句已经在创建对象PrepareStatement时指定了。例如:

    pstmt.executeUpdate();
    

    创建PrepareStatement对象会对SQl语句进行预编译,所以执行速度要快于Statement对象。因此,如果在程序中需要多次执行sql语句时,应使用preparedStatement对象来执行数据库操作,以提高效率。

    try{
    String sql="update dog set health=?,love=?,where id=?"
    pstmt=conn.prepareStatement(sql);
    pstmt.setInt(1,80);
    pstmt.setInt(2,15);
    pstmt.setInt(3,1);
    pstmt.executeUpdate();
    
    }
    

    PreparedStatement比Statement好在哪里?

    1提高了代码的可读性和可维护性。虽然使用PreparedStatement来替代Statement会多几行代码,但避免了烦琐麻烦又容易出错的SQl语句拼接,提高了代码的可读性和可维护性。
    2.提高了SQL语句执行的性能。创建Statement对象时不使用SQL语句做参数,不会解析和编译SQl语句,每次调用方法执行SQL语句时都要进行SQl语句解析和编译操作,即操作相同仅仅是数据不同。
    创建PreparedStatement对象时使用SQl语句做参数,会解析和编译该SQL语句。也可以使用带用占位符的SQL语句做参数,在通过setXXX()方法给占位符赋值后执行SQl语句时无须在解析和编译SQL语句,直接执行即可。多次执行相同的操作可以大大提高性能。
    3.提高了安全性。PreparedStatement使用预编译语句,传入的任何数据都不会和已经预编译的SQl语句进行拼接,避免了SQL注入攻击。

    展开全文
  • statement问题分析 如果需要用户输入,statement将不方便执行。 利用statement执行SQL的三个问题: 不能很好的描述出日期的形式 SQL语句拼凑处理导致维护困难 ...实现:PreparedStatement的实例需要通过Conne
  • JDBC中PreparedStatement用法代码示例

    千次阅读 2018-01-17 11:26:08
    java.sql.PreparedStatement extends Statement 该接口表示预编译的 SQL 语句的对象,SQL 语句被预编译并存储在 PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句。  如何获取...
  • 文章目录1、简述JDBC2、Connection接口3、Statement接口4、PreparedStatement接口5、ResultSet接口 1、简述JDBC JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种...
  • Connection的哪个方法可以建立PreparedStatement接口? a.createPrepareStatement() b.prepareStatement() c.createPreparedStatement() d.preparedStatement() 解析: JDBC有一个非常独特的动态连接结构,它...
  • 创建如下: CREATE TABLE goods( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(25) ); 实现方式汇总 package com.lty5.blob; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql...
  • 一个JDBC PreparedStatement示例,用于在数据库中创建表。 CREATE TABLE EMPLOYEE ( ID serial, NAME varchar(100) NOT NULL, SALARY numeric(15, 2) NOT NULL, CREATED_DATE timestamp with time zone NOT ...
  • PreparedStatement对象

    2021-03-31 16:56:22
    preparedStatement对象使用以及和statement对象的区别说明
  • 关于PreparedStatement: 1.PreparedStatement是Statement的子接口,作用与Statement一样,都是 2.PreparedStatement特点: 使用PreparedStatement可以执行动态参数化... 在我们调用创建PreparedStatement ...
  • 示例代码如下所示,虽然可以解决PreparedStatement的SQL语句中带in 条件的问题,但无法享受PreparedStatement的缓存带来的好处 package com.justin.pk4; import java.sql.Connection; import java.sql....
  • JAVA连接SQL_2008,通过JDBC_ODBC连接 可以创建: Statement sm=ct.createStatement(); rs=sm.executeQuery("select * from hero"); ...也可以创建preparedStatement 【注意比较...//3、创建 PreparedStatement
  • PreparedStatement接口继承自Statement接口,用于执行含有或不含有参数的预编译的SQL语句,相对于Statement接口,用于执行...创建执行SQL的语句(Statement) Statement与PreparedStatement区别 方式一:Statement...
  •  SQL 语句被预编译并且存储在 PreparedStatement 对象中。然后可以使用此对象高效地多次执行该语句。 注:用来设置 IN 参数值的 setter 方法(setShort、setString 等等)必须指定与输入参数的已定义 SQL 类型兼容...
  • Java中的PreparedStatement接口

    千次阅读 2017-03-22 22:15:17
    PreparedStatement接口继承自Statement接口,用于执行含有或不含有参数的预编译的SQL语句。相对于Statement接口用于执行静态...PreparedStatement对象用Connection接口中的prepareStatement方法所创建。如: 为SQL语
  • 在循环中创建preparedStatement对象的时候,不及时关闭流的话会出现这个问题 解决方案:每次用过这个对象一定要记得关闭,在循环中一般会new很多的preparedStatement对象,在new下一个对象之前,要及时的关闭掉流. 下面...
  • 主要介绍了Java数据库连接PreparedStatement的使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • IN参数的值在SQL语句创建时未被指定。该语句为每一个IN参数保留一个问号(“?”)作为占位符。每个问号的值必须在语句执行之前,通过适当的Setxxx方法提供。  代码如下: public void add(Bo
  • Java PreparedStatement

    2020-07-15 12:04:52
    Java PreparedStatement is just like a Statement and it’s part of the Java JDBC Framework. Java PreparedStatement就像一个Statement,它是Java JDBC Framework的一部分。 It is used to perform crud ...
  • “第三方的数据库连接池,使用的时候,获取到Connection之后,使用完成,调用的关闭方法(close()) ,并没有将Connection关闭,只是放回到连接池中,如果调用的这个方法,而没有手动关闭PreparedStatement等,则这...
  • PreparedStatement

    千次阅读 多人点赞 2019-08-07 19:44:47
    PreparedStatement解决SQL注入1. Statement 存在的问题Stetement存在SQL注入漏洞,换用PreparedStatement(预处理SQL)2. PreparedStatement执行步骤PreparedStatement使用Demo 上一回我们通过JDBC实现数据库增删改查...
  • 主要介绍了详解Java的JDBC中Statement与PreparedStatement对象,PreparedStatement一般来说比使用Statement效率更高,需要的朋友可以参考下
  • 我无法在数据库(mySQL)中创建表,使用preparedStatement并尝试使用preparedStatement.setInteger()输入future表的名称:static String queryCreateTable = "CREATE TABLE ?" +"(ID INTEGER not NULL ," +"BRAND ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 89,667
精华内容 35,866
关键字:

创建preparedstatement