数据库操作

Java数据库基础操作


Java 数据库


    下面我所讲的是基于 microsoft SQLServer 的,其他的只是附带提一下,可能操作会和我的不一样,请自行操作搜索解决

一、Java访问数据库的具体步骤

1.驱动加载

MySQL 的加载方法

    驱动加载就是把各个数据库提供的访问数据库的API加载到我们程序进来,加载JDBC驱动,并将其注册到DriverManager中,每一种数据库提供的数据库驱动不一样,加载驱动时要把jar包添加到lib文件夹下。所以我们要先下载 MySQL 的程序驱动,链接如下,点击如下图的第一个download
MySQL 下载驱动链接
下载界面

    下载之后打开找到里面有一个后缀为 .jar 的东西,如下图:
下载文件中的 .jar 文件

    接下来就是把驱动加载到程序里面去,我们来新建一个 Java 工程(我用的IDE是 eclipse,其他的IDE自行参考),然后新建一个 lib 文件夹,把刚才那个 .jar 文件复制进去(记住是点复制!不要选择错了),如下图:
文件夹结构

    然后点击工程属性,找到 Java Build Path,再点击右边的 Add JARS…(右边第一个),选择添加刚才的 .jar 文件,结果如下图:
添加JDBC驱动

    这样驱动就添加进来了:

Microsoft SQLServer 的加载方法

    这个与上面的是大同小异的,同样的需要下载相应的驱动,这里要注意的是不同的版本需要不同的驱动,下载的时候别下错了;然后导入工程文件中,再加载就行了,这个就不细说了。下面看一段测试代码:

package database;

import java.sql.SQLException;

public class Database {

    public static void main(String[] args)
            throws InstantiationException, IllegalAccessException,
            ClassNotFoundException, SQLException {
        //加载驱动,里面的参数是约定的,不用改动
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        System.out.println("# - 驱动加载完成");
    }
}

    看下运行结果:
MS Server 加载测试结果

    下面看一下一些主流数据库的JDBC驱动加裁注册的代码:

//Oracle8/8i/9iO数据库(thin模式)
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
//Sql Server7.0/2000数据库
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
//Sql Server2005/2008/2012数据库
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
//DB2数据库
Class.froName("com.ibm.db2.jdbc.app.DB2Driver").newInstance();
//MySQL数据库Class.forName("com.mysql.jdbc.Driver").newInstance();

2.建立链接

    这一步链接数据库可谓是艰辛啊!过程中的各种不知名的错误,红色的字是一次又一次的打击我的心灵,经过将近2个小时的奋斗才搞定的,下面讲述一下我的战斗过程,希望对各位有所帮助。
    为了确保能链接成功,我们需要做一下的工作:
- 确认本地的SQL Server (SQLEXPRESS) 服务已经打开,并开启 SQL Server Browser 和 SQL Server Reporting Services (SQLEXPRESS):可以右键计算机–系统服务–然后找到相应选项进行打开。如下图:
服务配置界面

  • 然后点击电脑左下方的“开始”->“Microsoft SQL Server2012”->“配置工具”->“SQL Server Configuration Manager”,弹出配置面板,再确认 里面的 SQL Server 服务–SQL Server (SQLEXPRESS),如果没有开启,请手动开启。结果如下图:
    SQL配置管理界面

  • 在上面那步接着往下走,我们再选择 SQL Server 网络配置–TCP/IP 选择点击启用。结果如下图:
    SQL开启TCP/IP监听

    完成了上面的配置,我们就可以链接数据库了。注意:不同的数据库和不同的版本的链接方式可能是不一样的,我的是 SQLServer 2012啊。下面是我进行链接的代码,其中进行了详细的说明:

package database;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Database {

    public static void main(String[] args)
            throws InstantiationException, IllegalAccessException,
            ClassNotFoundException, SQLException {

        //加载驱动,参数是约定的,不用改变
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        System.out.println("# - 驱动加载完成");

        //建立链接
        //这个基本是固定的,参照着具体数据库的参数来填
        String dbURL = "jdbc:sqlserver://localhost\\sqlexpress";
        //下面是你的登陆用户名,如果你是用window验证登陆的话,我建议你还是用SQL用户登陆比较好;
        //因为我用window验证登陆不上,不知道为啥,如果你也是,那就跟我一样用SQL用户登陆吧;
        //如果不会新建用户,请自行搜索百度
        String user = "order";
        //输入你用户的登陆密码
        String pass = "11111111";
        //建立链接
        Connection conn = DriverManager.getConnection(dbURL, user, pass);
        System.out.println("# - 链接成功建立");
    }
}

    结果如下图:
链接成功

    下面是一些相关数据库的链接方法:

//Oracle8/8i/9i数据库(thin模式)
String url="jdbc:oracle:thin:@localhost:1521:orcl";
String user="scott";
String password="tiger";
Connection conn=DriverManager.getConnection(url,user,password);
//Sql Server7.0/2000/2005/2008数据库
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs";
String user="sa";
String password="";
Connection conn=DriverManager.getConnection(url,user,password);
//DB2数据库
String url="jdbc:db2://localhost:5000/sample";
String user="amdin"
String password=-"";
Connection conn=DriverManager.getConnection(url,user,password);
//MySQL数据库
String url="jdbc:mysql://localhost:3306/testDB?user=root&password=root&useUnicode=true&characterEncoding=gb2312";
Connection conn=DriverManager.getConnection(url);

3.执行SQL语句和处理结果集

    这步才是最最重要的,前面的都是为了这步做的铺垫。所以这步一点都没有玩过的人来说还是比较难的,我到这步就有许多的困惑:在上面链接进数据库以后是在master这个数据库,那我们怎样切换到我们自己建立的数据库?不然我们怎么操作?刚开始我试着打了一下代码试了下,呵呵,完全没办法执行。然后就各种查资料,下面把我的心得分享给大家:

获取系统内的所有数据库列表
package database;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Database {

    public static void main(String[] args)
            throws InstantiationException, IllegalAccessException,
            ClassNotFoundException, SQLException {

        //加载驱动,参数是约定的,不用改变
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        System.out.println("# - 驱动加载完成");

        //建立链接

        //这个基本是固定的,参照着具体数据库的参数来填
        String dbURL = "jdbc:sqlserver://localhost\\sqlexpress";
        //下面是你的登陆用户名,如果你是用window验证登陆的话,我建议你还是用SQL用户登陆比较好;
        //因为我用window验证登陆不上,不知道为啥,如果你也是,那就跟我一样用SQL用户登陆吧;
        //如果不会新建用户,请自行搜索
        String user = "order";
        //输入你用户的登陆密码
        String pass = "14597894322";
        //建立链接
        Connection conn = DriverManager.getConnection(dbURL, user, pass);
        System.out.println("# - 链接成功建立");

        if (conn != null) {
            DatabaseMetaData dm = (DatabaseMetaData) conn.getMetaData();
            System.out.println("Driver name: " + dm.getDriverName());
            System.out.println("Driver version: " + dm.getDriverVersion());
            System.out.println("Product name: " + dm.getDatabaseProductName());
            System.out.println("Product version: " + dm.getDatabaseProductVersion());
        }
        //执行SQL语句

        //建立Statement对象
        Statement statement = conn.createStatement();
        //获取数据库列表
        ResultSet rs = conn.getMetaData().getCatalogs();
        //显示结果
        while (rs.next()) {
            System.out.println("TABLE_CAT = " + rs.getString("TABLE_CAT") );
        }
    }

}

result

    接下来我们来详细解析一下:
    我们首先要取得与数据库的链接,而我们程序与数据库之间的链接就是靠这个类 Connection,下面是JavaAPI的描述:

A connection (session) with a specific database. SQL statements are executed and results are returned within the context of a connection.

A Connection object’s database is able to provide information describing its tables, its supported SQL grammar, its stored procedures, the capabilities of this connection, and so on. This information is obtained with the getMetaData method.

    这个类可以说是程序与数据库的桥梁,里面可以执行SQL语句,包含数据库的信息,通过eclipse这个软件在文件中的有相应声明的类上悬停鼠标就可以显示这个类详细的信息,可以说是非常的便利,Java的API也很丰富和详细(这就是我喜欢Java的地方,很强大,现代这个软件发展速度没跟上硬件的时代,Java是可以的),我不知道其他的软件可不可以,但如果想自己学的话,你必须得自己学会查看文档和资源(没大腿自己搞真心很艰难,还好现在是互联网时代)。言归正传:上面的英文里说了一句我们可以用getMetaData来获取信息,就像程序中使用的哪样。使用getMetaData后就可以可以看到里面可以获取各种数据库信息和各种设置,这里就不多讲了,主要是这个方法。

切换到相应的数据库下,并执行查询语句

    相应的代码和说明如下:

package database;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Database {

    public static void main(String[] args)
            throws InstantiationException, IllegalAccessException,
            ClassNotFoundException, SQLException {

        //加载驱动,参数是约定的,不用改变
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        System.out.println("# - 驱动加载完成");

        //建立链接

        //这个基本是固定的,参照着具体数据库的参数来填
        String dbURL = "jdbc:sqlserver://localhost\\sqlexpress";
        //下面是你的登陆用户名,如果你是用window验证登陆的话,我建议你还是用SQL用户登陆比较好;
        //因为我用window验证登陆不上,不知道为啥,如果你也是,那就跟我一样用SQL用户登陆吧;
        //如果不会新建用户,请自行搜索百度
        String user = "order";
        //输入你用户的登陆密码
        String pass = "14597894322";
        //建立链接
        Connection conn = DriverManager.getConnection(dbURL, user, pass);
        System.out.println("# - 链接成功建立");

        if (conn != null) {
            DatabaseMetaData dm = (DatabaseMetaData) conn.getMetaData();
            System.out.println("Driver name: " + dm.getDriverName());
            System.out.println("Driver version: " + dm.getDriverVersion());
            System.out.println("Product name: " + dm.getDatabaseProductName());
            System.out.println("Product version: " + dm.getDatabaseProductVersion());
        }

        //执行SQL语句
        //切换到相应的数据库下面
        conn.setCatalog("Order_Management");
        //建立Statement对象,这个是用来执行 SQL 查询语句的
        Statement statement = conn.createStatement();
        //建立一个字符串对象,输入查询语句,就行使用SQL图形化界面进行查询一样
        String sql = "select * from client";
        //建立一个接受结果的对象 ResultSet,这个对象可以接受查询结果
        ResultSet rs = statement.executeQuery(sql);
        //显示结果,ResultSet这个对象就像一个指针,通过next()可以让它指向下一行
        while (rs.next()) {
            //我在这个数据库里建立一个client的表,里面有cname和cno这两列,下面的语句就是获取这
            //两列的相应数据的,输入相应列名即可
            System.out.println("你的第一个字段内容为:"+rs.getString("cname"));
            System.out.println("你的第二个字段内容为:"+rs.getString("cno"));
        }
    }

}

关闭数据库

    依次将ResultSet、Statement、PreparedStatement、Connection对象关 闭,释放所占用的资源。

re.close();
statement.close();
con.close();

    好了,基本的数据库操作就是这些了,祝各位玩的愉快(一整就是三天)

参考链接

Java, how to change current database to another?
sqlserver 服务器主体 无法在当前安全上下文下访问数据库
Sql Server 2008 R2数据库之登录名、用户、架构、权限和角色
how to get list of Databases “Schema” names of MySql using java JDBC
Java数据库操作
驱动加载参考视频(需要翻墙)
sqlserver所用端口、端口设置
SQL Server (SQLEXPRESS)服务为什么启用
Connect to Microsoft SQL Server via JDBC

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值