Java学习日记番外篇:jdbc基础

来源:互联网 发布:淘宝网打底裙裤 编辑:程序博客网 时间:2024/05/29 02:15

声明:这篇文章主要内容大部分都是从林信良的《Java学习日记》这本书中摘录下来,仅作为个人学习参考用。

JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序

简单地说,用jdbc我们就能在Java程序中灵活的用数据库啦,把Java程序和数据库就能连起来啦。

链接数据库:

先要导入相应的驱动。。。就是一些jar包。。

  • 普通项目:就在项目的根目录下新建一个文件夹,然后将需要的jar文件考进去,然后选择jar文件,右键。。选择build path。
  • Web项目:在WEB-INF下的lib文件夹下导入相应的jar包。

在做完这些之后,
要取得数据库联机,必须有几个动作:

  • 注册Driver对象;
  • 取得Connection对象;
  • 关闭Connection对象;

注册Driver对象

  • 第一种方法:(很少用)
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
  • 第二种方法:(用的比较多)
Class.forName("com.mysql.jdbc.Driver");

取得Connection对象:

在注册Driver对象之后,就要取得Connection对象了,可以这样取得:

Connection con = DriverManager.getConnection(jdbcURL, username, password);

括号中的:

jdbcURL:jdbc:mysql://主机名:端口/数据库名称?参数=值&参数=值jdbc:mysql://localhost:3306/demoUsername: rootPassword: 123456

也可以这样:jdbc:mysql://localhost:3306/demo?user=root&password=123456

事实上前面的这只是基本的,现在用javax.sql.DataSorse得到数据库的链接比较多,后面会讲到。

Statement、ResultSet

上面都是数据库取得链接,现在取得链接之后,要执行SQL的话,就必须取得java.sql.Statement对象。
可以用ConnectioncreateStatement()来取得Statement对象

Statement st = con.createStatement();

注意,这里导入的包是import java.sql.Statement;不要导入错啦~

这个Statement对象可以使用executeUpdate()/executeQuery()等方法来执行SQL。

  • executeUpdate()主要用来执行CreateTable、Insert、DropTable、AlterTable等会改变数据库内容的SQL。
    e.g.:
st.executeUpdate("create table jyk;");

这个方法会返回一个int结果,表示数据变动的笔数。

  • executeQuery()方法主要用于Select等查询数据库的SQL语句。

st.executeQuery(“select * from jyk;”);

这个方法会返回java.sql.ResultSet对象,代表查询结果。查询结果是一笔一笔的数据,可以使用ResultSetnext()方法移动到下一笔数据,这个next()方法会返回true或者false,表示是否有下一笔数据。可以使用getXXX()的方法取得数据。(例如getInt()

  • 指定域名来取得数据:
ResultSet result = st.executeQuery("select * from jyk;");            while(result.next())            {                String id = result.getInt("id");                String name = result.getString("name");            }
  • 指定字段来取得数据:(注意字段是从1开始)
ResultSet result = st.executeQuery("select * from jyk;");            while(result.next())            {                int id = result.getInt("1");                String name = result.getString("2");            }

完整的例子:

Class.forName("com.mysql.jdbc.Driver");                String jdbcURL="jdbc:mysql://localhost:3306/demo?user=root&password=123456";                Connection con = (Connection) DriverManager.getConnection(jdbcURL);                Statement st = con.createStatement();                st.executeUpdate("create table jyk;");                ResultSet result = st.executeQuery("select * from jyk;");                while(result.next())                {                    int id = result.getInt("id");                    String name = result.getString("name");                }

这里我并没有建立这个数据库,只是这样示范了一下,如果想要运行出结果,记得建立对应的数据库。

PreparedStatement、CallableStatement

使用Statement、ResultSet的时候会有一些不方便,也会有一些不安全。现在就可以使用预处理:PreparedStatement

PreparedStatement ps =con.prepareStatement("insert into jyk values(?,?)");

然后用setInt()setString()等方法,指定上面有“?”地方的数据。

ps.setInt(1, 001);ps.setString(2, "jjjyyykkk");

要让这句SQL生效,就要执行executeUpdate()/executeQuery()等方法。

ps.executeUpdate();

例子:

PreparedStatement ps =con.prepareStatement("insert into jyk values(?,?)");        ps.setInt(1, 001);        ps.setString(2, "jjjyyykkk");        ps.executeUpdate();

注意:Java类型和SQL类型并不是完全对应,下面有一个表格:

Java数据类型对应数据库数据类型

使用DataSource取得联机:

使用C3p0连接池:
使用时记得导入相应的jar包。

C3p0例子:

public static ComboPooledDataSource ds=new ComboPooledDataSource();ds.setDriverClass("com.mysql.jdbc.Driver");        ds.setJdbcUrl("jdbc:mysql://localhost:3306/iss");        ds.setUser("root");        ds.setPassword("mysql");        ds.setMaxPoolSize(20);        ds.setInitialPoolSize(3);        ds.setMinPoolSize(2);Connection cn=ds.getConnection();        System.out.println(cn);        PreparedStatement ps=cn.prepareStatement("select * from emp where id>?");        ps.setInt(1, 3);        ResultSet rs=ps.executeQuery();while(rs.next())        {            System.out.println(rs.getInt("id")+"\t"+rs.getString("name"));        }

其实我们也可以不用在这里配置连接池,因为在Java类中配置的话,但你想改变连接池的设置的时候,要重新加载连接池,所以我们可以吧连接池的配置写到一个properities文件里面,在这里叫c3p0.properities。

c3p0.properities

这个properities文件就放在src文件夹下就好啦

c3p0.driverClass=com.mysql.jdbc.Driverc3p0.user=rootc3p0.password=mysqlc3p0.jdbcUrl=jdbc:mysql://localhost:3306/issc3p0.initialPoolSize=3c3p0.maxPoolSize=5c3p0.minPoolSize=2

这样代码就变成了:

//ComboPooledDataSource的构造方法会在classpath下找c3p0.properties文件,并将此文件的属性值设置到ComboPooledDataSource对像对应的属性中    public static ComboPooledDataSource ds=new ComboPooledDataSource();    public static void main(String[] args)throws Exception {        Connection cn=ds.getConnection();        System.out.println(cn);        PreparedStatement ps=cn.prepareStatement("select * from emp where id>?");        ps.setInt(1, 3);        ResultSet rs=ps.executeQuery();        while(rs.next())        {            System.out.println(rs.getInt("id")+"\t"+rs.getString("name"));        }

这样就能方便很多,也不容易出错。

具体的数据库用法在其他代码里多熟悉熟悉~

0 0