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

声明:这篇文章主要内容大部分都是从林信良的《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/demo
Username: root
Password: 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.Driver
c3p0.user=root
c3p0.password=mysql
c3p0.jdbcUrl=jdbc:mysql://localhost:3306/iss
c3p0.initialPoolSize=3
c3p0.maxPoolSize=5
c3p0.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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值