使用jdbc对mysql进行增删改查

建立数据库和数据表

CREATE DATABASE `mysqlTest` DEFAULT CHARACTER SET utf8;
CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `num_id` int(11) DEFAULT NULL,
  `name` varchar(20) NOT NULL,
  `f_name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

简单的demo

package sql;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class JDBCDemo{
    
    public static void main(String[] args) throws SQLException{
        insertFunction();
        updateFunction();
        queryFunction();
    }
    
    public static void queryFunction() throws SQLException{
        Connection temconn = getCon();
        String sql = "SELECT id,f_name FROM test where id BETWEEN 2 AND 5 ";
        try(PreparedStatement stmt = temconn.prepareStatement(sql)){
            ResultSet rs = stmt.executeQuery();
            while(rs.next()){
                System.out.println(rs.getInt(1)+"\t"+rs.getString(2));
                //或者用列名做参数,可读性好,性能差一些
                System.out.println(rs.getInt("id")+"\t"+rs.getString("f_name"));
            }
        }catch (SQLException e) {
            e.printStackTrace();
            // TODO: handle exception
        }
        temconn.close();
    }
    
    public static void updateFunction() throws SQLException{
        Connection temconn = getCon();
        String sql = "UPDATE test SET f_name='update2' WHERE id BETWEEN 5 AND 10 ";
        try(PreparedStatement stmt = temconn.prepareStatement(sql)){
            int counts = stmt.executeUpdate();
            System.out.println(counts);
        }catch (SQLException e) {
            e.printStackTrace();
            // TODO: handle exception
        }
        temconn.close();
    }
    
    public static void insertFunction() throws SQLException{
        Connection temconn = getCon();
        try {
            //关闭自动提交,即开启事务
            temconn.setAutoCommit(false);
            for(int i=0;i<10;i++){
                int id = i;
                String sql = "INSERT INTO test (num_id,name,f_name) VALUES(?,?,?);";
                try(PreparedStatement stmt = temconn.prepareStatement(sql)){
                    stmt.setInt(1, id);
                    stmt.setString(2, "娜娜"+id);
                    stmt.setString(3, "f娜娜3"+id);
                    stmt.execute();
                }catch(Exception e){
                    e.printStackTrace();
                }
            }
            //事务提交
            temconn.commit();
        } catch (SQLException e1) {
            e1.printStackTrace();
            //发生异常则回滚
            temconn.rollback();
        }
        temconn.close();
    }
    
    public static Connection getCon(){
        Connection tmpconn = null;
        System.out.println("初始化时执行了public static Connection getCon()");
        try{
            Class.forName("com.mysql.jdbc.Driver");  
            String url = "jdbc:mysql://127.0.0.1:3306/mysqlTest?characterEncoding=UTF-8";
            String UserName = "root";
            String Password = "password";
            tmpconn = DriverManager.getConnection(url, UserName, Password);
//            tmpconn.setAutoCommit(false);
        }catch(Exception e){
            e.printStackTrace();
        }
        return tmpconn;
    }
}

 

 

多线程安全的插入demo

package sql;

import java.sql.Connection;
import java.sql.DriverManager;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
import java.util.concurrent.LinkedBlockingQueue;

public class LearnJDBC implements Runnable{

    private static LinkedBlockingQueue<Connection> conQueue = null;
    //线程数
    private static int threadCounts = 3;
    // 每个线程的循环数
    private static int forNumber = 3;
    
    public static void main(String[] args) throws InterruptedException{
        System.out.println("---------------------导入开始"+getNowTime()+"--------------");
        createConnections(threadCounts);
        LearnJDBC st = new LearnJDBC();
        for (int i = 0;i<threadCounts;i++){
            new Thread(st,"线程:"+i).start();
        }
    }
    
    public static void insertFunction(String threadName) throws InterruptedException{
        Connection temconn = conQueue.take();
        int threadNumber = Integer.parseInt(threadName.split(":")[1]);
        for(int i=0;i<forNumber;i++){
            int id = i;
            String sql = "INSERT INTO test (num_id,name,f_name) values(?,?,?);";
            try(java.sql.PreparedStatement stmt = temconn.prepareStatement(sql)){
                stmt.setInt(1, id*threadNumber);
                stmt.setString(2, "娜娜"+id+":"+threadName);
                stmt.setString(3, "f娜娜"+id+":"+threadName);
                stmt.execute();
            }catch(Exception e){
                e.printStackTrace();
            }
        }
        conQueue.put(temconn);
        System.out.println(threadName+"---导入结束"+getNowTime()+"--------------");
    }
    
    @Override
    public void run() {
        try {
            insertFunction(Thread.currentThread().getName());
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    
    //    产生一个简易的连接池
    public static void createConnections(int num){
        try {
            conQueue = getconQueue(num);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    
    public static LinkedBlockingQueue<Connection> getconQueue(int num) throws InterruptedException {
        LinkedBlockingQueue<Connection> temconQueue = new LinkedBlockingQueue<Connection>();
        for(int i=0; i<num; i++) {
            temconQueue.put(getCon());
        }
        return temconQueue;
    }
    
    public static Connection getCon(){
        Connection tmpconn = null;
        System.out.println("初始化时执行了public static Connection getCon()");
        try{
            Class.forName("com.mysql.jdbc.Driver");  
            String url = "jdbc:mysql://127.0.0.1:3306/mysqlTest?characterEncoding=UTF-8";
            String UserName = "root";
            String Password = "password";
            tmpconn = DriverManager.getConnection(url, UserName, Password);
//            tmpconn.setAutoCommit(false);
        }catch(Exception e){
            e.printStackTrace();
        }
        return tmpconn;
    }

    public static String getNowTime(){
        return (new SimpleDateFormat("HH:mm:ss")).format(new Date());
    }
    
    public static int getRandomNumber(int range){
        int number = new Random().nextInt(range) + 1;
        return number;
    }

}

 

posted @ 2017-02-16 20:47  lakeslove  阅读(604)  评论(0编辑  收藏  举报