JDBCPreparedStatement
Posted MrChengs
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDBCPreparedStatement相关的知识,希望对你有一定的参考价值。
PreparedStatement:
是一个预编译对象
是Statement的子接口
允许数据库预编译SQL
执行SQL的时候,无需重新传入SQL语句,它们已经编译SQL语句
执行SQL语句 :executeQuery()或execute Update() 注意:不要在传入SQL语句
可以有效地防止SQL注入
方法:
->setXxxx(int index,Xxx value):传入参数值。
连接/关闭方法
public Connection getConnection() throws Exception { String driver = "com.mysql.jdbc.Driver"; String url = "jdbc:mysql://localhost:3307/shijian"; String user = "root"; String password = "1234"; Class.forName(driver); Connection connection = DriverManager.getConnection(url, user, password); return connection; //System.out.println(connection); } //关闭 public void Close(ResultSet rs, Statement statement, Connection conn) { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (statement != null) { try { statement.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } }
@Test public void testPreparedStatementjdbc(){ Connection connection = null; PreparedStatement preparedStatement = null; try { connection = getConnection(); String sql = "insert into student(sname,sclass) values(?,?)"; preparedStatement = (PreparedStatement) connection.prepareStatement(sql);
preparedStatement.setString(1, "lisi"); preparedStatement.setInt(2, 123456); //不要传入SQL语句 preparedStatement.executeUpdate(); } catch (Exception e) { e.printStackTrace(); }finally { Close(null, preparedStatement, connection); } }
ResultSetMetaData
是描述ResuleSet的元数据对象,即从中得到有多少列,列明是什么
得到ResultSetMetaData 对象:调用ResultSet 的 getMetaData()方法
ResultSetMetaData的好方法
-->int getColumnLabel(int column) 获取指定的列名,缩影从1开始
-->String getColumnCount() SQL语句有哪些列
@Test public void testResultMeteData(){ Connection connection = null; PreparedStatement statement =null; ResultSet resuleset = null; try { String sql = "select * from student where id = ?"; connection = testGetConnection(); statement = (PreparedStatement) connection.prepareStatement(sql); statement.setInt(1, 2); resuleset = statement.executeQuery(); //1.得到ResultSetMetaData对象 ResultSetMetaData rsmd = (ResultSetMetaData) resuleset.getMetaData(); //2.打印每一列的列名 Map<String,Object> values = new HashMap<String,Object>(); while(resuleset.next()){ for(int i = 0; i < rsmd.getColumnCount();i++){ String c = rsmd.getColumnLabel(i +1); Object ovalue = resuleset.getObject(c); //System.out.println(c + "--" + ovalue); values.put(c, ovalue); } Class clazz = Student.class; Object object = clazz.newInstance(); for(Map.Entry<String, Object> entry: values.entrySet()){ String sid = entry.getKey(); String sname = (String) entry.getValue(); System.out.println( sid + "--" + sname); } } } catch (Exception e) { e.printStackTrace(); }finally { Close(resuleset, statement, connection); } }
以上是关于JDBCPreparedStatement的主要内容,如果未能解决你的问题,请参考以下文章
Javasist 在检测 org.h2.jdbc.JdbcPreparedStatement 的 setString 方法时抛出 javassist.CannotCompileException
JDBC PreparedStatement、批量更新和生成的Keys
Java jdbcpreparedStatement 超出了 OutOfMemoryError GC 开销限制
使用 JDBC PreparedStatement 返回 MySql 中生成的键
JDBC PreparedStatement 似乎忽略占位符
逃脱的正确方法是啥?使用 Oracle 12c MATCH_RECOGNIZE 时 JDBC PreparedStatement 中的字符?