1. 程式人生 > >JDBC程式設計學習筆記(二)——執行SQL語句 ExecuteSQL.java

JDBC程式設計學習筆記(二)——執行SQL語句 ExecuteSQL.java

本文主要介紹使用Statement的execute()方法來執行任意的SQL語句,並列出你在執行該程式中可能會遇到的一系列問題,我只能將我在執行中遇到的問題描述,希望對你有所幫助。首先,你需要建立一個配置資料庫的配置檔案,如下圖:


檔案的內容如下圖:


內容主要是MySQL的url,以及使用者帳號和密碼,只要有這配置檔案,我們就不需要在程式碼內部改,只需載入配置檔案即可。以下附上原始碼:

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

public class ExecuteSQL
{
	private String driver;
	private String url;
	private String user;
	private String pass;
	Connection conn;
	Statement stmt;
	ResultSet rs;
	public void initParam(String paramFile) throws Exception
	{
		//使用Properties類來載入屬性檔案
		Properties props=new Properties();
		props.load(new FileInputStream(paramFile));
		driver=props.getProperty("driver");
		url=props.getProperty("url");
		user=props.getProperty("user");
		pass=props.getProperty("pass");
	}
	public void executeSql(String sql) throws Exception
	{
		try
		{
			//載入驅動
			Class.forName(driver);
			//獲取資料庫連線
			conn=DriverManager.getConnection(url,user,pass);
			//使用Connection來建立一個Statment物件
			stmt=conn.createStatement();
			//執行SQL,返回boolean值表示是否包含ResultSet
			boolean hasResultSet=stmt.execute(sql);
			//如果執行後有ResultSet結果集
			if(hasResultSet)
			{
				
				//獲取結果集
				rs = stmt.getResultSet();
				//ResultSetMetaData是用於分析結果集的元資料介面
				ResultSetMetaData rsmd = rs.getMetaData();
				int columnCount = rsmd.getColumnCount();
				//迭代輸出ResultSet物件
				while(rs.next())
				{
					//依次輸出每列的值
					for(int i=0;i<columnCount;i++)
					{
						System.out.print(rs.getString(i+1)+"\t");
					}
					System.out.print("\n");
				}
				
			}
			else
			{
				System.out.println("該SQL語句影響的記錄有"+stmt.getUpdateCount()+"條");
			}
		}
		//使用finally塊來關閉資料庫資源
		finally
		{
			if (rs != null)
			{
				rs.close();
			}
			if (stmt != null)
			{
				stmt.close();
			}
			if (conn != null)
			{
				conn.close();
			}
		}
	}
	public static void main(String[] args) throws Exception
	{
		ExecuteSQL es=new ExecuteSQL();
		es.initParam("D:/mysql.ini");
		System.out.println("------執行刪除表的DDL語句-----");
		es.executeSql("drop table if exists my_test");
		System.out.println("------執行建表的DDL語句-----");
		es.executeSql("create table  my_test"+"(test_id int auto_increment primary key,"+"test_name varchar(255))");
		System.out.println("------執行插入資料的DML語句-----");
		es.executeSql("insert into my_test(test_name)"+"select student_name from student_table");
		System.out.println("------執行查詢資料的查詢語句-----");
		es.executeSql("select*from my_test");
	}
}
編譯沒有錯誤,你會很高興,結果一執行,結果可能如下圖......................


這主要又是資料庫的字元編碼問題,具體我也不是很清楚,請大家看部落格http://blog.csdn.net/geilivablemental/article/details/45034229.....我是看了之後,然後再修改,即在原始碼上加入下列兩條語句:


然後就......


可以了...........