美文网首页
Java JDBC编程

Java JDBC编程

作者: 一亩三分甜 | 来源:发表于2019-10-13 20:45 被阅读0次

    每天一点点,感受自己存在的意义。

    JDBC编程步骤

    1.Load the Driver

    • 1.Class.forName()|Class.forName().newInstance()|new DriverName()
    • 2.实例化时自动向DriverManager注册,不需显式调用DriverManager.registerDriver方法。

    2.Connect to the DataBase

    • 1.DriverManager.getConnection();

    3.Execute the SQL

    • 1.Connection.CreateStatement();
    • 2.Statement.executeQuery();
    • 3.Statement.executeUpdate();

    4.Retrieve the result data

    • 1.循环取得结果while(rs.next())

    5.Show the result data

    • 1.将数据库中的各种类型转换为Java中的类型(getXXX)方法。

    6.Close

    • 1.close the resultset & close the statement & close the connection
    import java.sql.*;
    public class JDBCStart {
        //JDBC driver name and database URL
        static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
        static final String DB_URL = "jdbc:mysql://localhost:3306/firstDB";
        static final String USER = "root";
        static final String PASS = "1234567890";
    
        public static void main(String[] args)
        {
            Connection conn = null;
            Statement stmt = null;
            ResultSet rs = null;
            try{
                Class.forName("com.mysql.jdbc.Driver");
                System.out.println("Connecting to database...");
                conn = DriverManager.getConnection(DB_URL,USER,PASS);
                System.out.println("Creating statement...");
                stmt = conn.createStatement();
                String sql;
                sql = "select ID,name,age,BIRTHDAY from person";
                rs = stmt.executeQuery(sql);
                while (rs.next())
                {
                   int id = rs.getInt("ID");
                   String name = rs.getString("name");
                   int age = rs.getInt("age");
                   String birthday = rs.getString("BIRTHDAY");
                   System.out.println("ID:"+id);
                   System.out.println("name:"+name);
                   System.out.println("age:"+age);
                   System.out.println("BIRTHDAY:"+birthday);
                }
                rs.close();
                stmt.close();
                conn.close();
            }catch (SQLException se)
            {
                se.printStackTrace();
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }finally {
                try {
                    if (stmt!=null)
                    {
                        stmt.close();
                        stmt = null;  
                    }
                }catch (SQLException se2)
                {
                    se2.printStackTrace();
                }
                try
                {
                    if (conn!=null)
                    {
                        conn.close();
                        conn = null;
                    }
                }
                catch (SQLException se)
                {
                   se.printStackTrace();
                }
                try{
                    if (rs!=null)
                    {
                        rs.close();
                        rs = null;
                    }
                }catch (SQLException se1)
                {
                    se1.printStackTrace();
                }
            }
            System.out.println("try finish");
        }
    }
    //输出
    Connecting to database...
    Creating statement...
    ID:4
    name:Nick
    age:24
    BIRTHDAY:1990-05-22 00:00:00.0
    ID:5
    name:Rick
    age:24
    BIRTHDAY:1991-05-22 00:00:00.0
    ID:6
    name:Anny
    age:22
    BIRTHDAY:1992-05-22 00:00:00.0
    ID:7
    name:Calvin
    age:23
    BIRTHDAY:1992-05-22 00:00:00.0
    ID:8
    name:Lisa
    age:23
    BIRTHDAY:1992-05-22 00:00:00.0
    ID:9
    name:Kerry
    age:33
    BIRTHDAY:null
    try finish
    

    将参数添加到数据库语句中

    import java.sql.*;
    
    public class JDBCTest {
        //JDBC driver name and database URL
        static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
        static final String DB_URL = "jdbc:mysql://localhost:3306/firstDB";
        static final String USER = "root";
        static final String PASS = "1234567890";
        public static void main(String[] args)
        {
            if (args.length != 4)
            {
                System.out.println("Parameter Error! Please Input Again!");
                System.exit(-1);
            }
            int id = 0;
            try {
                id = Integer.parseInt(args[0]);
            }catch (NumberFormatException e)
            {
                System.out.println("Parameter Error! Deptno should be Number Format!");
                System.exit(-1);
            }
            String name = args[1];
            int age = 0;
            try{
               age = Integer.parseInt(args[2]);
            }catch (NumberFormatException e)
            {
                System.out.println("Parameter Error! Deptno should be Number Format!");
                System.exit(-1);
            }
            String date = args[3];
            Connection conn = null;
            Statement stmt = null;
            try{
            Class.forName("com.mysql.jdbc.Driver");
            System.out.println("Connecting to database...");
            conn = DriverManager.getConnection(DB_URL,USER,PASS);
            System.out.println("Creating statement...");
            stmt = conn.createStatement();
            String sql;
            sql = "insert into person VALUES (" + id +",'"+ name + "',"+age+",'"+date+"')";
            stmt.executeUpdate(sql);
            stmt.close();
            conn.close();
            }catch (SQLException se0)
            {
                se0.printStackTrace();
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }finally {
                try {
                    if (stmt!=null)
                    {
                        stmt.close();
                        stmt = null;
                    }
                }catch (SQLException se2)
                {
                    se2.printStackTrace();
                }
                try
                {
                    if (conn!=null)
                    {
                        conn.close();
                        conn = null;
                    }
                }
                catch (SQLException se)
                {
                    se.printStackTrace();
                }
            }
            System.out.println("try finish");
        }
    }
    //输出
    Connecting to database...
    Creating statement...
    try finish
    
    Snip20191013_4.png

    灵活指定SQL语句中的变量PreparedStatement

    import java.sql.*;
    
    public class JDBCPreparedStatement {
        //JDBC driver name and database URL
        static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
        static final String DB_URL = "jdbc:mysql://localhost:3306/firstDB";
        static final String USER = "root";
        static final String PASS = "1234567890";
        public static void main(String[] args)
        {
            if (args.length != 4)
            {
                System.out.println("Parameter Error! Please Input Again!");
                System.exit(-1);
            }
            int id = 0;
            try {
                id = Integer.parseInt(args[0]);
            }catch (NumberFormatException e)
            {
                System.out.println("Parameter Error! Deptno should be Number Format!");
                System.exit(-1);
            }
            String name = args[1];
            int age = 0;
            try{
                age = Integer.parseInt(args[2]);
            }catch (NumberFormatException e)
            {
                System.out.println("Parameter Error! Deptno should be Number Format!");
                System.exit(-1);
            }
            String date = args[3];
            Connection conn = null;
            PreparedStatement pstmt = null;
            try{
                Class.forName("com.mysql.jdbc.Driver");
                System.out.println("Connecting to database...");
                conn = DriverManager.getConnection(DB_URL,USER,PASS);
                System.out.println("Creating statement...");
                String sql;
                sql = "insert into person VALUES (?,?,?,?)";
                pstmt = conn.prepareStatement(sql);
                pstmt.setInt(1,id);
                pstmt.setString(2,name);
                pstmt.setInt(3,22);
                pstmt.setString(4,"1990-08-10");
                pstmt.executeUpdate();
            }catch (SQLException se0)
            {
                se0.printStackTrace();
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }finally {
                try {
                    if (pstmt!=null)
                    {
                        pstmt.close();
                        pstmt = null;
                    }
                }catch (SQLException se2)
                {
                    se2.printStackTrace();
                }
                try
                {
                    if (conn!=null)
                    {
                        conn.close();
                        conn = null;
                    }
                }
                catch (SQLException se)
                {
                    se.printStackTrace();
                }
            }
            System.out.println("try finish");
        }
    }
    //输出
    Connecting to database...
    Creating statement...
    try finish
    
    Snip20191013_5.png

    JDBC处理存储过程

    在MYSQL WorkBench创建存储过程。


    0.gif
    CREATE PROCEDURE `pro_findById`(sid int)
    BEGIN
    select * from PERSON where (id = sid);
    END
    
    • 1.调用带有输入参数的存储过程
    import java.sql.*;
    
    public class JDBCCallableStatement {
        //JDBC driver name and database URL
        static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
        static final String DB_URL = "jdbc:mysql://localhost:3306/firstDB";
        static final String USER = "root";
        static final String PASS = "1234567890";
        public static void main(String[] args)
        {
            Connection conn = null;
            CallableStatement cstmt = null;
            ResultSet rs = null;
            try{
                Class.forName("com.mysql.jdbc.Driver");
                System.out.println("Connecting to database...");
                conn = DriverManager.getConnection(DB_URL,USER,PASS);
                System.out.println("Creating statement...");
                String sql;
                sql = "call pro_findById(?)";
                cstmt = conn.prepareCall(sql);
                cstmt.setInt(1,4);
                rs = cstmt.executeQuery();
                while (rs.next())
                {
                    int id = rs.getInt("ID");
                    String name = rs.getString("name");
                    int age = rs.getInt("age");
                    String birthday = rs.getString("BIRTHDAY");
                    System.out.println("-id-:"+id+"-name-"+name+"-age-:"+age+"-birthday-"+birthday);
                }
            }catch (SQLException se0)
            {
                se0.printStackTrace();
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }finally {
                try {
                    if (cstmt!=null)
                    {
                        cstmt.close();
                        cstmt = null;
                    }
                }catch (SQLException se2)
                {
                    se2.printStackTrace();
                }
                try
                {
                    if (conn!=null)
                    {
                        conn.close();
                        conn = null;
                    }
                }
                catch (SQLException se)
                {
                    se.printStackTrace();
                }
            }
            System.out.println("try finish");
        }
    }
    //输出
    Connecting to database...
    Creating JDBCCallableStatement...
    -id-:4-name-Nick-age-:25-birthday-1992-05-22 00:00:00.0
    try finish
    
    • 2 带有两个输入参数的存储过程
    import java.sql.*;
    
    public class JDBCCallableStatement0 {
        //JDBC driver name and database URL
        static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
        static final String DB_URL = "jdbc:mysql://localhost:3306/firstDB";
        static final String USER = "root";
        static final String PASS = "1234567890";
        public static void main(String[] args)
        {
            Connection conn = null;
            CallableStatement cstmt = null;
            ResultSet rs = null;
            try{
                Class.forName("com.mysql.jdbc.Driver");
                System.out.println("Connecting to database...");
                conn = DriverManager.getConnection(DB_URL,USER,PASS);
                System.out.println("Creating statement...");
                String sql;
                sql = "call pro_findByIdAndAge(?,?)";
                cstmt = conn.prepareCall(sql);
                cstmt.setInt(1,4);
                cstmt.setInt(2,26);
                rs = cstmt.executeQuery();
                while (rs.next())
                {
                    int id = rs.getInt("ID");
                    String name = rs.getString("name");
                    int age = rs.getInt("age");
                    String birthday = rs.getString("BIRTHDAY");
                    System.out.println("-id-:"+id+"-name-"+name+"-age-:"+age+"-birthday-"+birthday);
                }
            }catch (SQLException se0)
            {
                se0.printStackTrace();
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }finally {
                try {
                    if (cstmt!=null)
                    {
                        cstmt.close();
                        cstmt = null;
                    }
                }catch (SQLException se2)
                {
                    se2.printStackTrace();
                }
                try
                {
                    if (conn!=null)
                    {
                        conn.close();
                        conn = null;
                    }
                }
                catch (SQLException se)
                {
                    se.printStackTrace();
                }
            }
            System.out.println("try finish");
        }
    }
    输出
    Connecting to database...
    Creating JDBCCallableStatement...
    -id-:4-name-Nick-age-:25-birthday-1992-05-22 00:00:00.0
    -id-:5-name-Rick-age-:26-birthday-1992-05-22 00:00:00.0
    -id-:6-name-Jim-age-:26-birthday-1992-05-20 00:00:00.0
    try finish
    
    • 3 带有输出参数的存储过程
      创建存储过程
    delimiter $
    CREATE PROCEDURE `pro_findById0` (IN sid int,OUT sname varchar(20))
    BEGIN
    select name into sname from PERSON where id = sid;
    END
    $
    

    正常查询输出id = 4的name为Nick。

    import java.sql.*;
    
    public class JDBCCallableStatement1 {
        //JDBC driver name and database URL
        static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
        static final String DB_URL = "jdbc:mysql://localhost:3306/firstDB?noAccessToProcedureBodies=true";
        static final String USER = "root";
        static final String PASS = "123";
        public static void main(String[] args)
        {
            Connection conn = null;
            CallableStatement cstmt = null;
            ResultSet rs = null;
            try{
                Class.forName("com.mysql.jdbc.Driver");
                System.out.println("Connecting to database...");
                conn = DriverManager.getConnection(DB_URL,USER,PASS);
                System.out.println("Creating JDBCCallableStatement1...");
                String sql;
                sql = "call pro_findById0(?,?)";
                cstmt = conn.prepareCall(sql);
                cstmt.setInt(1,4);
                cstmt.registerOutParameter(2, java.sql.Types.VARCHAR);
                cstmt.executeQuery();
                String result = cstmt.getString(2);
                System.out.println(result);
            }catch (SQLException se0)
            {
                se0.printStackTrace();
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }finally {
                try {
                    if (cstmt!=null)
                    {
                        cstmt.close();
                        cstmt = null;
                    }
                }catch (SQLException se2)
                {
                    se2.printStackTrace();
                }
                try
                {
                    if (conn!=null)
                    {
                        conn.close();
                        conn = null;
                    }
                }
                catch (SQLException se)
                {
                    se.printStackTrace();
                }
            }
            System.out.println("try finish");
        }
    }
    
    输出
    Connecting to database...
    Creating JDBCCallableStatement1...
    Nick
    try finish
    

    批处理

    import java.sql.*;
    public class JDBCBatch {
        //JDBC driver name and database URL
        static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
        static final String DB_URL = "jdbc:mysql://127.0.0.1:3306/firstDB?useSSL=false&useUnicode=true&characterEncoding=UTF-8";
        static final String USER = "root";
        static final String PASS = "123";
    
        public static void main(String[] args)
        {
            Connection conn = null;
            Statement stmt = null;
            ResultSet rs = null;
            try{
                Class.forName("com.mysql.jdbc.Driver");
                System.out.println("Connecting to database...");
                conn = DriverManager.getConnection(DB_URL,USER,PASS);
                System.out.println("Creating statement...");
                stmt = conn.createStatement();
                stmt.addBatch("insert into book values(5,'百年孤独',51,600)");
                stmt.addBatch("insert into book values(6,'荒野猎人',52,550)");
                stmt.addBatch("insert into book values(7,'从你的全世界路过',53,580)");
                stmt.executeBatch();
                stmt.close();
                conn.close();
            }catch (SQLException se)
            {
                se.printStackTrace();
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }finally {
                try {
                    if (stmt!=null)
                    {
                        stmt.close();
                        stmt = null;
                    }
                }catch (SQLException se2)
                {
                    se2.printStackTrace();
                }
                try
                {
                    if (conn!=null)
                    {
                        conn.close();
                        conn = null;
                    }
                }
                catch (SQLException se)
                {
                    se.printStackTrace();
                }
                try{
                    if (rs!=null)
                    {
                        rs.close();
                        rs = null;
                    }
                }catch (SQLException se1)
                {
                    se1.printStackTrace();
                }
            }
            System.out.println("try finish");
        }
    }
    //输出
    Connecting to database...
    Creating statement...
    try finish
    
    import java.sql.*;
    
    public class JDBCBatch0 {
        //JDBC driver name and database URL
        static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
        static final String DB_URL = "jdbc:mysql://127.0.0.1:3306/firstDB?useSSL=false&useUnicode=true&characterEncoding=UTF-8";
        static final String USER = "root";
        static final String PASS = "123";
    
        public static void main(String[] args)
        {
            Connection conn = null;
            PreparedStatement stmt = null;
            ResultSet rs = null;
            try{
                Class.forName("com.mysql.jdbc.Driver");
                System.out.println("Connecting to database...");
                conn = DriverManager.getConnection(DB_URL,USER,PASS);
                System.out.println("Creating statement...");
                stmt = conn.prepareStatement("insert into book values(?,?,?,?);");
                stmt.setInt(1,8);
                stmt.setString(2,"平凡的世界");
                stmt.setFloat(3,59);
                stmt.setInt(4,1370);
                stmt.addBatch();
    
                stmt.setInt(1,9);
                stmt.setString(2,"人生");
                stmt.setFloat(3,62);
                stmt.setInt(4,240);
                stmt.addBatch();
    
                stmt.setInt(1,10);
                stmt.setString(2,"悲惨世界");
                stmt.setFloat(3,45);
                stmt.setInt(4,370);
                stmt.addBatch();
    
                stmt.executeBatch();
                stmt.close();
                conn.close();
            }catch (SQLException se)
            {
                se.printStackTrace();
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }finally {
                try {
                    if (stmt!=null)
                    {
                        stmt.close();
                        stmt = null;
                    }
                }catch (SQLException se2)
                {
                    se2.printStackTrace();
                }
                try
                {
                    if (conn!=null)
                    {
                        conn.close();
                        conn = null;
                    }
                }
                catch (SQLException se)
                {
                    se.printStackTrace();
                }
                try{
                    if (rs!=null)
                    {
                        rs.close();
                        rs = null;
                    }
                }catch (SQLException se1)
                {
                    se1.printStackTrace();
                }
            }
            System.out.println("try finish");
        }
    }
    //输出
    Connecting to database...
    Creating statement...
    try finish
    
    Snip20191109_3.png

    相关文章

      网友评论

          本文标题:Java JDBC编程

          本文链接:https://www.haomeiwen.com/subject/mxukmctx.html