JDBC连接数据库学习心得

来源:互联网 发布:华为大数据研发岗累吗 编辑:程序博客网 时间:2024/05/29 03:42

JDBC连接数据库学习心得

1.    环境的搭建

首先在intelliJADE下新建工程,并且在工程根目录下创建lib包,lib包用于存放JDBC的jar包,以及以后其他工具jar包.将jar包存入并且导入环境配置后进行下一步

2.数据库连接mysql有两种方式

  (1).通过在页面写数据库连接语句连接数据库.

  优点:当你刚刚搭设好环境用于测试的情况下,这几句话非常方便.连接数据库的基本步骤与语句是JDBC的基础,后面的Util类里面的方法也是基于这个基础封装的.

  缺点:如果你要进行项目开发,每一个需要对数据库进行操作的方法与类都需要写一遍,而且如果数据库的密码路径发生更改,需要每一个写了这些语句的地方都需要更改.费时费力容易出错.

  (2).通过创建一个JdbcUtil类,将数据库连接与关闭的方法包装进去,并且将数据库的地址与账户信息,写到一个文本文件中,并用JdbcUtil类里的方法去读取与调用.

   优点:1.在项目开发中,创建Util这个连接类之后,每次需要对数据库进行操作的时候,可以直接调用这个Util连接类,通过里面封装好的方法可以轻松对数据库进行访问,避免了大量的代码冗余,

        2.如果数据库的路径与账户信息发生改变,只需要对文本文件进行改动即可,极大的方便了操作,也减少了出错的机会

        3.符合java的封装思想

2.1简述JDBC连接数据库的两种方式

(1).在页面写数据库连接语句连接数据库

[1].注册驱动,由于驱动是分厂家的,有重复性的操作,推荐使用类对象

Class.forname("com.mysql.jdbc.Driver");

//上面这句话会将这个类先加载进内存,之后此类的静态代码块就会执行,在静态代码块中就已经有了注册驱动的代码

[2].建立连接并且获取连接对象

Connectionconn = DriverManager.getConnection(path);

path的三种写法

第一种:

path="jdbc:mysql://localhost:3306/jdbc?user=root&password=newpass"

localhost:3306为数据库的地址与端口号,如果是本地数据库那么默认用localhost,本地默认端口号3306.如果是网络上的数据库,比如Linux虚拟机里的则需要填写他们的ip地址例如:172.16.110.129

端口号/jdbc.此jdbc为数据库名称

?连接的是参数 &在参数与参数之间起到连接作用

user与password都是参数名

root与newpass都是参数值

如果数据库的编码不是utf8那么在通过Java代码去访问数据库进行增删改查的时候,需要传输汉字,那么在?后面应该加上编码规则?characterEncoding=UTF-8,这样数据库可以识别Java传过来的汉字

第二种:

path=""jdbc:mysql://localhost:3306/jdbc","root","newpass""

数据库的地址与登录的用户名和信息分别用双引号括起来进行区分,这样可以不用输入?和&也不用输入参数名,只需要输入账号和密码并且用双引号括起来即可.

第三种:

创建一个Properties对象用来存储参数,用户名和密码

Propertiesproperties = new Properties();
//以key-value的方式存储
properties.setProperty("user", "root");
properties.setProperty("password","newpass");

这样在DriverManger.getConnection()里面就需要写

("jdbc:mysql://数据库地址(localhost/网络ip):端口号(本机默认3306)/所选择的数据库名称")

[3].根据连接对象,获得Statement对象

Statementstmt = conn.creatStatement();

[4].由statement对象执行sql语句

例如:

statement.execute("CREATE TABLE stu("id INT PRIMARYKEY , name VARCHAR(50), age INT )");

ResultSet resultSet =stmt.executeQuery("SELECT * FROM stu;");

对于查询语句,需要使用executeQuery进行操作,以及需要调用ResultSet这个类去接收查询结果

//输出当前resultset指针所在位置
System.out.println(resultSet.getRow());
//next后的位置
resultSet.next();
//previous后的位置
resultSet.previous();

可以使用while循环遍历搜索结果

while (resultSet.next()) {
    System.out.println("id:" + resultSet.getInt("id") +
            " name:" + resultSet.getString("name") +
            " age:" + resultSet.getInt("age"));
}

[5].对数据库进行操作之后要进行关闭流操作

conn.close;

stmt.close;

rs.close;

以上五个步骤为直接在类里创建数据库连接,并且进行了插入和查询两个步骤的完整方法

(2).通过创建JdbcUtil类对数据库进行连接

[1].创建一个类,类名是JdbcUtil,并且在src文件夹下创建Properties名字为jdbcfg

[2]打开JdbcUtil开始编写连接,创建静态代码块

//驱动类的路径
private static StringdriverClass=null;
//连接数据库使用的url
private static Stringurl = null;
//用户名和密码
private static Stringuser = null;
private static String password = null;
private static Connection conn = null;

//提前声明是因为之后在catch还需要用到
static {
    try {
        ClassLoader cl = Jdbcutil.class.getClassLoader();
        InputStream stream =cl.getResourceAsStream("jdbcfg.properties");
        //得到流中的数据
        //创建一个Properties对象
        Propertiesprop = new Properties();
        //通过Properties对象的Load方法,加载流中的数据
        prop.load(stream);
        //根据key,获得value
        driverClass = prop.getProperty("driverClass");
        url = prop.getProperty("url");
        user = prop.getProperty("user");
        password = prop.getProperty("password");
        Class.forName(driverClass);
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
//写一个静态方法,获取连接对象
public static Connection getConnection() throwsSQLException {
    return DriverManager.getConnection(url,user,password);
}
//写一个静态方法,获得stmt对象
public static Statement getStatment() throwsSQLException {
    conn = getConnection();
    return conn.createStatement();
}
public static void release(){
    if (conn!=null){
        try {
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
public static void release(Statementstmt){
    release(stmt,null);
}
//写一个静态方法,用来释放资源
//如果想要释放Connection,需要调用Connection对象的close方法
//所以需要将Connection对象传入release方法,
//然后在release方法中调用该对象的close方法,
//释放资源
//statment对象与ResultSet对象同理
public staticvoid release( Statement stmt, ResultSet rs){
    release();
    if (stmt!=null){
        try {
            stmt.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    if (rs!=null){
        try {
            rs.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

2.2通过创建JdbcUtil类之后,以后的操作可以直接调用而不需要重新创建连接

原创粉丝点击