可爱的静静 发表于 2017-8-31 23:57:43

java 笔记

本帖最后由 可爱的静静 于 2017-9-1 00:05 编辑

java操作数据库的几个步骤:
1、注册驱动:
        Class.forName("驱动程序类名加上包名");
2、建立与数据库的连接,获得Connection对象,其格式:
        Connection 对象名=DriverManager.getConnection("url","用户名","密码")
        连接SQL Server的url格式:
                jdbc:sqlserver://连接的服务器地址:端口号;databasename=数据库名

3、创建命令对象Statement,其格式:
        Statement 对象名=Connection对象.createStatement();
4、执行SQL语句,其格式:
        插入、删除、更新:
                statement对象.executeUpdate(sql语句)   返回int类型表示受影响的行数
5、关闭资源
        statement对象.close();
        Connection对象.close();

在10.34.61.101的电脑上,SQLServer2008中创建StuMng数据库,建立users表,其字段
        id int自动增长
        name varchar(50)
        email varchar(50)
        birthday date

        用户名:sa,密码:123456

利用Java程序向该数据库表增加记录
        '张三''123@123.com''1997-12-2'

import java.sql.*;

public class Test {
        public static void main(String[] args) {
               
                try {
                        //1、注册驱动
                        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                } catch (ClassNotFoundException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
               
                try {
                        //2、建立与数据库的连接
                        Connection conn = DriverManager.getConnection("jdbc:sqlserver://10.34.61.101:1433;" +
                                        "databasename=StuMng","sa","123456");
                        //3、创建Statement对象
                        Statement stmt = conn.createStatement();
                        //4、执行sql语句
                        //插入
                        //String sql = "insert into users(name,email,birthday) values('张三','123@123.com','1997-9-1')";
                        //更新
                        //String sql = "update users set name='软件123',email='ls@123.com' where id=1";
                        //删除
                        String sql = "delete from users where id<5";
                        int i = stmt.executeUpdate(sql);
                        //System.out.println("插入了" + i + "行");
                        //System.out.println("更新了" + i + "行");
                        System.out.println("删除了" + i + "行");
                        //关闭资源
                        stmt.close();
                        conn.close();
                } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
        }
}


Java对数据库实现查询:
1、注册驱动:
        Class.forName("驱动程序类名加上包名");
2、建立与数据库的连接,获得Connection对象,其格式:
        Connection 对象名=DriverManager.getConnection("url","用户名","密码")
        连接SQL Server的url格式:
                jdbc:sqlserver://连接的服务器地址:端口号;databasename=数据库名

3、创建命令对象Statement,其格式:
        Statement 对象名=Connection对象.createStatement();
4、执行查询的sql语句,其格式:
        ResultSet 对象名 = Statement对象.executeQuery(sql语句)

        ResultSet用于保存JDBC执行查询时返回的结果集,这个结果集封装在一个逻辑表格中

        在ResultSet内部有一个指向表格数据行的指针,ResultSet初始化时,这个指针指向表格
                的第一行的前面位置
        常用方法:
                1)、boolean next():用于将指针指向下一行,如果下一行有数据,返回true,否则返回false
                        while(ResultSet对象.next())//遍历所有的行
                        {

                        }
                2)、xxx getXxx(String 字段名) ;获得某行对应的某个字段的值
                        xxx表示在数据库该字段的数据类型
                                int i = ResultSet对象.getInt("id")
                                这里的i获得字段id的值,因为字段id为int类型,所以这里用getInt方法,并且返回int

                                String n = ResulstSet对象.getString("name")

                3)、xxx getXxx(int index):获得某行第index个字段的值
                        int i = ResultSet对象.getInt(1)//获得某行第1个字段的值
                        String n = ResultSet对象.getString(2)

                4)、close():关闭结果集
5、关闭资源,先创建后关闭
        ResultSet对象.close();
        Statement对象.close();
        Connection对象.close();

import java.sql.*;

public class Test {
        public static void main(String[] args) {
               
                try {
                        //1、注册驱动
                        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                } catch (ClassNotFoundException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
               
                try {
                        //2、建立与数据库的连接
                        Connection conn = DriverManager.getConnection("jdbc:sqlserver://10.34.61.101:1433;" +
                                        "databasename=StuMng","sa","123456");
                        //3、创建Statement对象
                        Statement stmt = conn.createStatement();
                       
                        //4、执行查询
                        String sql = "select * from users";
                        //执行查询后,返回结果集对象
                        ResultSet rs = stmt.executeQuery(sql);
                        //对结果集进行操作,获得所有行对应的字段值
                        while(rs.next())
                        {
                                //获得指针所指向行对应的字段值
                                int i = rs.getInt("id");//获得该行字段名为id的字段值
                                String n = rs.getString(2); //获得该行第2个字段的值
                                String e = rs.getString("email");
                                String b = rs.getString(4);
                                //输出
                                System.out.println(i + " | " + n + " | " + e + " | " + b);
                        }
                       
                        //5、关闭资源,先创建后关闭
                        rs.close();
                        stmt.close();
                        conn.close();
                       
                } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
        }
}


通过Statement执行Sql语句时,每次执行SQL语句,都会对其进行编译,当相同的SQL语句执行多次,
        Statement对象就会对数据库频繁编译相同的SQL语句,会降低数据库的访问效率
为了解决此问题,Statement提供了一个子类PreparedStatement,这个类可以对SQL语句进行
        预编译,当相同的SQL语句再次执行时,就不需要对sql语句再次编译,从而提高效率


利用PreparedStatement操作数据库的步骤:
1、注册驱动:
        Class.forName("驱动程序类名加上包名");
2、建立与数据库的连接,获得Connection对象,其格式:
        Connection 对象名=DriverManager.getConnection("url","用户名","密码")
        连接SQL Server的url格式:
                jdbc:sqlserver://连接的服务器地址:端口号;databasename=数据库名

3、创建命令对象PreparedStatement,其格式:
        PreparedStatement 对象名=Connection对象.prepareStatement(sql语句);

        这里的SQl语句中的字段值可以用?代替,成为占位符
        String sql = "insert into users(name,email,birthday) values(?,?,'1997-9-1')";

        这时还需要对sql语句中占位符赋值
                PreparedStatement对象.setXxx(int index,Xxx 值)表示对第index个占位符赋值
                                Xxx表示对应的?值的数据类型
               
                PreparedStatement对象.setString(1,"张三");
                PreparedStatement对象.setString(2,"123@123.com")

4、执行SQL语句,其格式:
        插入、删除、更新:
                PreparedStatement对象.executeUpdate()   返回int类型表示受影响的行数
        查询
                ResultSet 对象名=PreparedStatement对象.executeQuery()
5、关闭资源
        ResultSet对象.close();
        Preparedstatement对象.close();
        Connection对象.close();

import java.sql.*;

public class Test {
        public static void main(String[] args) {
               
                try {
                        //1、注册驱动
                        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                } catch (ClassNotFoundException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
               
                try {
                        //2、建立与数据库的连接
                        Connection conn = DriverManager.getConnection("jdbc:sqlserver://10.34.61.101:1433;" +
                                        "databasename=StuMng","sa","123456");
                       
                        //3、创建PreparedStatement对象
                        String sql = "insert into users(name,email,birthday) values(?,?,'1997-9-1')";
                        PreparedStatement pst = conn.prepareStatement(sql);
                        //对占位符赋值
                        pst.setString(1,"张三");
                        pst.setString(2,"123@123.com");
                        //4、执行SQL语句
                        int i = pst.executeUpdate();
                        System.out.println("插入了" + i + "行");
                       
                        pst.close();
                        conn.close();
                       
                } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
        }
}


4、执行sql语句
        插入、删除、修改,其格式:
                statement对象.executeUpdate(sql语句)返回受影响的行数int
        查询:
                statement对象.executeQuery(sql语句)返回ResultSet对象结果集
                        while(ResultSet对象.next())
                        {
                                ResultSet对象.getXxx()获得某行某字段的值
                        }
5、关闭资源,先创建后关闭
        ResultSet对象.close();
        Statement对象.close();
        Connection对象.close();


import java.sql.*;
import java.util.*;

public class Test {

        public static void main(String[] args) {
                //创建Scanner对象,用于输入
                Scanner scn = new Scanner(System.in);
                int choice = -1;
                do
                {
                        System.out.println("请输入你的选择");
                        System.out.println("1:增加单词;2:查询单词;3:修改单词;4:删除单词;5:退出");
                        try
                        {
                                //接受用户的输入
                                choice = Integer.parseInt(scn.nextLine());
                        }catch(Exception ex)
                        {
                                System.out.println("请输入数字");
                                continue;
                        }
                        switch(choice)
                        {
                        case 1:
                                addWord(scn);//自定义方法,增加单词
                                break;
                        case 2:
                                query(scn); //查询
                                break;
                        case 3:
                        case 4:
                        }
                       
                }while(choice!=5);
        }
        private static void query(Scanner scn)
        {
                System.out.println("请输入要查询的词");
                String word = scn.nextLine();
                //查询的sql语句
                String sql = "select * from dict where chinese='" + word + "' or english='" + word + "'";
                Connection conn = getConnection();//获得连接,调用自定义方法
               
                try {
                        //创建Statement对象
                        Statement stmt = conn.createStatement();
                        //执行查询,返回ResultSet对象
                        ResultSet rs = stmt.executeQuery(sql);
                        //遍历结果集
                        while(rs.next())
                        {
                                String cha = rs.getString(2);
                                String en = rs.getString(3);
                                System.out.println(cha + "---" + en);
                        }
                        //关闭资源
                        rs.close();
                        stmt.close();
                        conn.close();
                       
                } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
        }
        //自定义方法,用于获得与数据库的连接
        private static Connection getConnection()
        {
                try {
                        //注册驱动
                        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                } catch (ClassNotFoundException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                Connection conn = null;
               
                //获得连接对象
                try {
                        conn = DriverManager.getConnection("jdbc:sqlserver://10.34.61.101:1433;databasename=dictionary","sa","123456");
                } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
               
                return conn;
        }
        //自定义方法,用于增加单词
        private static void addWord(Scanner scn)
        {
                System.out.println("请输入中文");
                String chinese = scn.nextLine();
                System.out.println("请输入对应的英文");
                String english = scn.nextLine();
                //建立与数据库的连接,调用自定义方法
                Connection conn = getConnection();
               
                try {
                        //创建Statement对象
                        Statement stmt = conn.createStatement();
                        //sql语句
                        String sql = "insert into dict(chinese,english) values('" + chinese + "','" + english + "')";
                        //insert into dict(chinese,english) values('软件','english')
                        //执行sql语句
                        int i = stmt.executeUpdate(sql);
                        if(i>0)
                        {
                                System.out.println("单词增加成功");
                        }
                        else
                        {
                                System.out.println("单词增加失败");
                        }
                        //关闭资源
                        stmt.close();
                        conn.close();
                } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
               
        }
}
页: [1]
查看完整版本: java 笔记