JDBC学习笔记+练习代码

JDBC学习笔记+练习代码

package study;

import java.io.*;
import java.util.*;
import java.sql.*;
import javax.sql.*;

public class JDBCStudy
{
    public static void main(String[] args)
    {       
        int id;
        String name;
        String sex;
        String comefrom;
        String queryStatement = "select * from jdbcstudy";
        String queryPrepare = "select * from jdbcstudy where id = ?";
        String queryScroll = "select * from jdbcstudy";
        String queryUpdate = "select * from jdbcstudy";
        String storedProc = "create procedure SHOW_JDBC_STUDY  " +
                            "@userName Char(10) " +
                            "as " +
                            "select * from jdbcstudy " +
                            "where name = @userName;" ;
       
        String Interval = "/n----------------------------------------------------/n" ;
       
       
        //创建输出流,将错误信息保存到文件中
        String ErrorFileName = "SystemErr.txt";
        PrintWriter errLog = null;
        PrintStream stdErr = null;
        try
        {
           FileOutputStream errors = new FileOutputStream(ErrorFileName, true);
           errLog = new PrintWriter(errors, true);
           stdErr = new PrintStream(errors);
        }catch(Exception e)
        {
            System.out.println("Redirection error: Unable to open SystemErr.txt");
        }
        System.setErr(stdErr);     
       
        //------------------------------------------------------------------
        System.out.println(Interval);
        //------------------------------------------------------------------
       
        try
        {         
           
            /*
             * 游标移动说明:
             * next()           :向下移动一条记录。
             * previous()       :向上移动一条记录。
             * first()          :移动到第一条记录。
             * last()           :移动到最后一条记录。
             * beforeFirst()    :移动到第一条记录的前面。
             * afterLast()      :移动到最后一条记录的后面。
             * absolute(int rowNumber)  :将游标移动到参数中指定的rowNumber处。
             *      如果该值为正,游标从起始位置算起向下移动rowNumber行。
             *      如果该值为负,游标从末尾位置算起向上移动rowNumber行。
             * relative(int rowNumber)  :指定从当前位置按某个方向将游标移动rowNumbwr行。
             *      正值向前移动rowNumbwr行。
             *      负值向后移动rowNumber行。
             *
             * 判断是否为指定行:
             * isFirst()        :判断是否为第一条记录。
             * isLast()         :判断是否为最后一条记录。
             * isBeforeFirst()  :判断是否为第一条记录的前面。
             * isAfterLast()    :判断是否为最后一条记录的后面。
             * getRow()         :获得当前的行号。
             */           
           
           
            //------------------------------------------------------------------
            Class.forName("com.mysql.jdbc.Driver");
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/suihu", "root", "suihu");
           
            //使用Statement
            System.out.println("使用Statement:");
            Statement stmt = con.createStatement();
            ResultSet rsStmt = stmt.executeQuery(queryStatement);
            while (rsStmt.next())
            {
                id = rsStmt.getInt("id");
                name = rsStmt.getString("name");
                sex = rsStmt.getString("sex");
                comefrom = rsStmt.getString("comefrom");
                System.out.println(id + "/t" + name + "/t" + sex + "/t" + comefrom);
            }
           
            //------------------------------------------------------------------
            System.out.println(Interval);
            //------------------------------------------------------------------
           
            //使用PreparedStatement
            System.out.println();
            System.out.println("使用PreparedStatement:");
            PreparedStatement pstmt = con.prepareStatement(queryPrepare);
            pstmt.setInt(1, 1);
            ResultSet rsPstmt = pstmt.executeQuery();

            while (rsPstmt.next())
            {
                id = rsPstmt.getInt("id");
                name = rsPstmt.getString("name");
                sex = rsPstmt.getString("sex");
                comefrom = rsPstmt.getString("comefrom");
                System.out.println(id + "/t" + name + "/t" + sex + "/t" + comefrom);
            }           
           
            //------------------------------------------------------------------
            System.out.println(Interval);
            //------------------------------------------------------------------
           
            //创建可滚动ResultSet
            System.out.println();
            System.out.println("创建可滚动ResultSet:");    
            Statement stmtScroll = con.createStatement(
                    ResultSet.TYPE_SCROLL_INSENSITIVE,
                    ResultSet.TYPE_FORWARD_ONLY);
            ResultSet rsScroll = stmtScroll.executeQuery(queryScroll);
            ResultSetMetaData rsmdScroll = rsScroll.getMetaData();
            int nScrollColumns = rsmdScroll.getColumnCount();
           
            System.out.println("显示列名:");
            for (int i = 1; i <= nScrollColumns; i++)
               System.out.print(rsmdScroll.getColumnLabel(i) + ((i == nScrollColumns) ? "/n" : "/t"));
           
            System.out.println("向下滚动:");
            while (rsScroll.next())
            {
                for (int i = 1; i <= nScrollColumns; i ++)
                    System.out.print(rsScroll.getString(i) + ((i == nScrollColumns) ? "/n" : "/t"));
            }
           
            System.out.println("向上滚动:");
            while (rsScroll.previous())
            {
                for (int i = 1; i <= nScrollColumns; i ++)
                    System.out.print(rsScroll.getString(i) + ((i == nScrollColumns) ? "/n" : "/t"));
            }
           
            System.out.println("移动到指定记录(2):");
            rsScroll.absolute(2);
            for (int i = 1; i <= nScrollColumns; i ++)
                System.out.print(rsScroll.getString(i) + ((i == nScrollColumns) ? "/n" : "/t"));
           
            System.out.println("向下滚动指定数量(2):");
            rsScroll.relative(2);
            for (int i = 1; i <= nScrollColumns; i ++)
                System.out.print(rsScroll.getString(i) + ((i == nScrollColumns) ? "/n" : "/t"));
           
            //------------------------------------------------------------------
            System.out.println(Interval);
            //------------------------------------------------------------------
           
            /*
             *
             * ResultSet更新方法:
             *
             * 数据类型                     方法
             * BigDecimal                   updateBigDecimal(String columnName, BigDecimal x)
             * boolean                      updateBoolean(String columnName, boolean x)
             * byte                         updateByte(String columnName, byte x)
             * byte[]                       updateBytes(String columnName, byte[] x)
             * double                       updateBouble(String columnName, double x)
             * float                        updateFloat(String columnName, float x)
             * int                          updateInt(String columnName, int x)
             * java.io.InputStream          updateAsciiStream(String columnName, InputStream x, int length)
             * java.io.inputStream          updateUnicodeStream(String columnName, InputStream x, int length)
             * java.io.InputStream          updateBinaryStream(String columnName, InputStream x, int length)
             * java.sql.Date                updateDate(String columnName, Date x)
             * java.sql.Time                updateTime(String columnName, Time x)
             * java.sql.Timestamp           updateTimestamp(String columnName, Timestamp x)
             * long                         updateLong(String columnName, long x)
             * Object                       updateObject(String columnName, Object x)
             * Object                       updateObject(String columnName, Object x, int scale)
             * short                        updateShort(String columnName, short x)
             * String                       updateString(String columnName, String x)
             * NULL                         updateNull(String columnName)
             *
             * 注意:更新完ResultSet中的列值后,必须在移动游标前调用ResultSet的
             *       updateRow()方法对数据库做持久的改变,因为使用更新方法做的
             *       修改只有调用updateRow()后才有效。
             *      
             *       可以调用cancelRowUpdates()方法指定在调用updateRow()前忽略
             *       所作的更新。然而,一旦调用updateRow(),cancelRowUpdate()
             *       方法不再起作用。
             */
           
           
            //创建可更新的ResultSet
            System.out.println();
            System.out.println("创建可更新的ResultSet:"); 
            Statement stmtUpdate = con.createStatement(
                    ResultSet.TYPE_FORWARD_ONLY,
                    ResultSet.CONCUR_UPDATABLE);
            ResultSet rsUpdate = stmtUpdate.executeQuery(queryUpdate);
            ResultSetMetaData rsmdUpdate = rsUpdate.getMetaData();
           
            if (rsUpdate.getConcurrency() == ResultSet.CONCUR_UPDATABLE)
                System.out.println("UPDATABLE");
            else
                System.out.println("READ_ONLY");
           
            int nUpdateColumns = rsmdScroll.getColumnCount();
            for (int i = 1; i <= nUpdateColumns; i++)
               System.out.print(rsmdUpdate.getColumnLabel(i) + ((i == nUpdateColumns) ? "/n" : "/t"));
           
            while (rsUpdate.next())
            {
                if (rsUpdate.getString("name").equals("隋虎"))
                    rsUpdate.updateString("comefrom", "内蒙古自治区");
                else if (rsUpdate.getString("name").equals("金婵"))
                    rsUpdate.updateString("comefrom", "辽宁省抚顺市");
                else
                    rsUpdate.updateString("comefrom", "辽宁省盘锦市");
               
                rsUpdate.updateRow();
               
                for (int i = 1; i <= nUpdateColumns; i ++)
                    System.out.print(rsUpdate.getString(i) + ((i == nUpdateColumns) ? "/n" : "/t"));
            }
           
            System.out.println("/n插入一新行:");
            rsUpdate.moveToInsertRow();  //插入一新行
            rsUpdate.updateString("name", "朱凯");
            rsUpdate.updateString("sex", "男");
            rsUpdate.updateString("comefrom", "辽宁省阜新市");
            rsUpdate.insertRow(); //保存插入行
            rsUpdate.last();
            for (int i = 1; i <= nUpdateColumns; i ++)
                System.out.print(rsUpdate.getString(i) + ((i == nUpdateColumns) ? "/n" : "/t"));
           
           
            System.out.println("/n删除一行:");
            rsUpdate.last();
            System.out.println(rsUpdate.getString("name"));
            rsUpdate.deleteRow();  //删除一行
            rsUpdate.last();
            System.out.println(rsUpdate.getString("name"));
           
            //------------------------------------------------------------------
            System.out.println(Interval);
            //------------------------------------------------------------------
           
           
            //使用CallableStatment
            System.out.println();
            System.out.println("使用CallableStatment:");
            Statement stmtProc = con.createStatement();
            stmtProc.executeUpdate(storedProc);
            CallableStatement cstmt = con.prepareCall("{call SHOW_JDBC_STUDY(?)}");
            cstmt.setString(1, "隋虎");
            ResultSet rsCstmt = cstmt.executeQuery();
            while (rsCstmt.next())
            {
                id = rsCstmt.getInt("id");
                name = rsCstmt.getString("name");
                sex = rsCstmt.getString("sex");
                comefrom = rsCstmt.getString("comefrom");
                System.out.println(id + "/t" + name + "/t" + sex + "/t" + comefrom);
            }   

            //------------------------------------------------------------------
            System.out.println(Interval);
            //------------------------------------------------------------------
           
            //关于批列表
            System.out.println();
            System.out.println("关于批列表:"); 
            con.setAutoCommit(false);
            Statement stmtBatch = con.createStatement();
            stmtBatch.addBatch("insert into jdbcstudy(name, sex, comefrom) values('田磊', '男', '辽宁')");
            stmtBatch.addBatch("insert into jdbcstudy(name, sex, comefrom) values('徐宝珠', '女', '辽宁')");
            int[] updateCounts = stmtBatch.executeBatch();
            con.commit();
            con.setAutoCommit(true);
            System.out.println("批列表操作成功");           
           
            con.close();
        }
        catch(ClassNotFoundException cnfe)
        {
            cnfe.printStackTrace(errLog);
        }
        catch(BatchUpdateException bue)
        {
            bue.printStackTrace(errLog);
        }
        catch(SQLException sqle)
        {
            sqle.printStackTrace(errLog);
        }
    }
}
 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值