`
jackson_jar
  • 浏览: 37572 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

jdbc DEMO (sql语句的批处理,事务处理,数据绑定prepare)

    博客分类:
  • java
阅读更多

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());
    }
}

 

分享到:
评论

相关推荐

    利用POI解析excel并存入数据库demo

    // 准备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 ...

    JDBC-Demo-Projects:包含JDBC mini项目,我正在研究

    预编译的SQL语句可以提高性能,因为数据库只需要解析一次SQL,后续的执行只需要绑定不同的参数即可。此外,它还有助于防止SQL注入攻击,因为参数是通过占位符来传递的,而不是直接拼接在SQL字符串中。 这个项目中的...

    demo1-202405

    首先建立数据库连接,设置SQL语句,然后将参数值绑定到占位符,最后调用executeUpdate()方法执行。 ```java Connection conn = DriverManager.getConnection(DB_URL, USER, PASS); PreparedStatement pstmt = conn....

    sql-injection-demo:这是使用Java EE和Oracle数据库进行SQL注入的演示

    SQL注入通常发生在应用程序没有充分验证用户输入的情况下,攻击者可以通过输入特定的SQL语句片段,使服务器执行非预期的数据库操作。例如,一个简单的登录界面如果没有对用户名和密码进行过滤,攻击者可能输入" OR '...

    java经典面试2010集锦100题(不看你后悔)

    B) 在Java的类中可以有三类内容分别是数据的定义、基本输出语句、函数的定义。 C) Java中的封装就是将对象的数据和操作数据的方法相结合,通过方法将对象的数据和实现细节保护起来。 D) Java语言中的多态的含义可以...

    Java数据库连接PreparedStatement的使用详解

    2. 防止 SQL 注入:PreparedStatement 可以防止 SQL 注入攻击,因为它使用参数绑定,而不是将用户输入直接拼接到 SQL 语句中。 使用 PreparedStatement 的步骤 1. 加载驱动:首先需要加载 JDBC 驱动,以便连接...

Global site tag (gtag.js) - Google Analytics