组装数据库

组装数据库

文章 http://blog.youkuaiyun.com/xiaolangfanhua/article/details/52592859 中已经讲解了如何通过文件中的属性信息连接数据库,本文将讲解在连接数据库之后如何读取并执行SQL语句,下面介绍一下主要操作步骤:

1、连接数据库:
getConnection方法读取database.properties文件中的属性信息,并将属性jdbc.drivers 添加到系统属性中。驱动程序管理器使用属性jdbc.drivers 加载相应的驱动程序。getConnection 方法使用jdbc.url , jdbc.username , jdbc.password 等属性打开数据库连接。

2、使用SQL语句打开文件:
如果未提供任何文件名,则在控制台提示用户输入语句。

3、使用泛化的execute 方法执行每条语句:
如果它返回true ,则说明该语句产生了一个结果集。

4、处理结果集:
如果产生了结果集,则打印出结果。因为这是一个泛化的结果集,所以我们必须使用元数据来确定该结果的列数。

5、异常处理:
如果运行过程中出现SQL异常,则打印出这个异常以及所有包含在其中的与其链接在一起的相关异常。

6、关闭数据库连接

实例代码如下:

import java.nio.file.*;
import java.sql.*; 
import java.io.*;
import java.util.*;


/**
 * 读取SQL语句文件,执行这些语句。
 * 数据库组装
 * @author Administrator
 *
 */
public class ExecSQL {

    public static void main(String[] args) throws IOException
    {

        try
        {
            Scanner in=(args.length==0? new Scanner(System.in) : new Scanner(Paths.get(args[0])));

            try(Connection conn=TestDB.getConnection())
            {
                Statement stat=conn.createStatement();

                while(true)
                {
                    if(args.length==0) System.out.println("Enter command or EXIT to exit:");

                    if(!in.hasNext()) return;

                    String line=in.nextLine();
                    if(line.equals("EXIT")||line.equals("exit")) 
                    {
                        in.close();
                        return;
                    }

                    if(line.trim().endsWith(";"))
                    {
                        line=line.trim();
                        line=line.substring(0,line.length()-1);
                    }
                    try
                    {
                        boolean isResult=stat.execute(line);
                        if(isResult)
                        {
                            ResultSet rs=stat.getResultSet();
                            showResultSet(rs);
                        }
                        else
                        {
                            int updateCount=stat.getUpdateCount();
                            System.out.println(updateCount+"rows updated");
                        }
                    }catch(SQLException ex)
                    {
                        for(Throwable e:ex)
                        {
                            e.printStackTrace();
                        }
                    }
                }
            }
        }catch(SQLException e)
        {
            for(Throwable t:e)
            {
                t.printStackTrace();
            }
        }
    }

    private static void showResultSet(ResultSet rs) throws SQLException {

        ResultSetMetaData metaData=rs.getMetaData();
        int columCount=metaData.getColumnCount();

        for(int i=1;i<=columCount;i++)
        {
            if(i>1) System.out.print(", ");
            System.out.print(metaData.getColumnLabel(i));
        }
        System.out.println();

        while(rs.next())
        {
            for(int i=1;i<=columCount;i++)
            {
                if(i>1) System.out.print(", ");
                System.out.print(rs.getString(i));
            }
            System.out.println();
        }
    }

}

代码中 TestDB 是文章 http://blog.youkuaiyun.com/xiaolangfanhua/article/details/52592859 中实例代码中的类,是用于通过文件中的属性信息创建数据库连接的,其方法 getConnection() 返回一个数据库连接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值