package com.chinacountry.databases; import java.sql.*; import java.util.StringTokenizer; public class connDB { String sDBDriver = "org.gjt.mm.mysql.Driver"; String sConnStr = "jdbc:mysql://10.100.27.13:3306/db1"; Connection cn = null; Statement stmt; boolean autoCommit; private String DbType="MYSQL"; //private String DbType="oracle"; private connDB() { init(); } private void init() { try { Class.forName(sDBDriver).newInstance(); cn = DriverManager.getConnection(sConnStr,"naxweb","naxweb");
} catch(Exception e) { System.err.println("conndb(): " + e.getMessage()); } } public static connDB getNewInstance() { return new connDB(); } //数据绑定的资料好像很少,有空给大家一个例子。在这里只能返回PreparedStatement。 public PreparedStatement getPreparedStmt(String sql) throws SQLException { PreparedStatement preStmt=null; try { preStmt = cn.prepareStatement(sql); } catch(SQLException ex) { ex.printStackTrace(); throw ex; } return preStmt; } public void beginTrans() throws SQLException { try { autoCommit=cn.getAutoCommit(); cn.setAutoCommit(false); } catch(SQLException ex) { ex.printStackTrace(); System.out.print("beginTrans Errors"); throw ex; } } public void commit() throws SQLException { try { cn.commit(); cn.setAutoCommit(autoCommit); } catch(SQLException ex) { ex.printStackTrace(); System.out.print("Commit Errors"); throw ex; } } public void rollback() { try { cn.rollback(); cn.setAutoCommit(autoCommit); } catch(SQLException ex) { ex.printStackTrace(); System.out.print("Rollback Errors"); //throw ex; } } public boolean getAutoCommit() throws SQLException { boolean result=false; try { result=cn.getAutoCommit(); }
catch(SQLException ex) { ex.printStackTrace(); System.out.println("getAutoCommit fail"+ex.getMessage()); throw ex; } return result; } //默认的情况下一次executeQuery(String sql)是一次事务。 //但是可以调用beginTrans(),然后多次executeQuery(String sql),最后commit()实现多sql的事务处理(注意在这种情况下如果发生违例,千万不要忘了在catch(){调用rollBack()})。 // public ResultSet executeQuery(String sql) throws SQLException { ResultSet rs = null; try { stmt=cn.createStatement(); rs = stmt.executeQuery(sql); } catch(SQLException ex) { ex.printStackTrace(); System.out.println("conndb.executeQuery:"+ex.getMessage()); throw ex; } return rs; } public void executeUpdate(String sql) throws SQLException { try { stmt=cn.createStatement(); stmt.executeUpdate(sql); } catch(SQLException ex) { ex.printStackTrace(); System.out.println("conndb.executeUpdate:"+ex.getMessage()); throw ex; } } //Method doBatch 的参数sql,是由一些sql语句拼起来的,用;隔开。可以将许多的sql放在一个事物中,一次执行。 public int[] doBatch(String sql) throws SQLException { int[] rowResult=null; String a; try { //boolean autoCommit=cn.getAutoCommit(); //cn.setAutoCommit(false); stmt=cn.createStatement(); StringTokenizer st = new StringTokenizer(sql,";"); while (st.hasMoreTokens()) { a=st.nextToken(); stmt.addBatch(a); } rowResult=stmt.executeBatch(); } catch(SQLException ex) { ex.printStackTrace(); System.out.println("conndb.doBatch:"+ex.getMessage()); throw ex; } return rowResult; } public String getDbType() { return DbType; } public void close() throws SQLException { try { stmt.close(); stmt=null; cn.close(); cn=null; } catch(SQLException ex) { ex.printStackTrace(); System.out.println("Closeing connection fail"+ex.getMessage()); throw ex;
} } public static void main(String[] args) throws Exception { connDB con=connDB.getNewInstance(); System.out.print(con.getDbType()); } }
|
相关推荐
// 准备SQL语句 for (Row row : sheet) { if (row.getRowNum() == 0) continue; // 跳过表头 Object[] data = new Object[sheet.getRow(0).getPhysicalNumberOfCells()]; for (int i = 0; i (); i++) { Cell ...
预编译的SQL语句可以提高性能,因为数据库只需要解析一次SQL,后续的执行只需要绑定不同的参数即可。此外,它还有助于防止SQL注入攻击,因为参数是通过占位符来传递的,而不是直接拼接在SQL字符串中。 这个项目中的...
首先建立数据库连接,设置SQL语句,然后将参数值绑定到占位符,最后调用executeUpdate()方法执行。 ```java Connection conn = DriverManager.getConnection(DB_URL, USER, PASS); PreparedStatement pstmt = conn....
SQL注入通常发生在应用程序没有充分验证用户输入的情况下,攻击者可以通过输入特定的SQL语句片段,使服务器执行非预期的数据库操作。例如,一个简单的登录界面如果没有对用户名和密码进行过滤,攻击者可能输入" OR '...
B) 在Java的类中可以有三类内容分别是数据的定义、基本输出语句、函数的定义。 C) Java中的封装就是将对象的数据和操作数据的方法相结合,通过方法将对象的数据和实现细节保护起来。 D) Java语言中的多态的含义可以...
2. 防止 SQL 注入:PreparedStatement 可以防止 SQL 注入攻击,因为它使用参数绑定,而不是将用户输入直接拼接到 SQL 语句中。 使用 PreparedStatement 的步骤 1. 加载驱动:首先需要加载 JDBC 驱动,以便连接...