什么是數據庫( 五 )


package skydevkit;
import java.sql.*;
public class JdbcOdbc_test {
ResultSet results;
ResultSetMetaData rsmd;
DatabaseMetaData dma;
Connection con;
public JdbcOdbc_test() throws SQLException {
String url = "jdbc:odbc:Northwind";
try {
//加載 JDBC-ODBC 橋驅動程序
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con = DriverManager.getConnection(url);//連接數據庫
dma = con.getMetaData();//獲取數據庫的元數據
System.out.println("Connected to:" + dma.getURL());
System.out.println("Driver " + dma.getDriverName());
} catch (Exception e) {
System.out.println(e);
}
try {
Statement stmt = con.createStatement();
results = stmt.executeQuery("select * from 客戶;");
ResultSetMetaData resultMetaData = https://minzuwang.com/read/results.getMetaData();
int cols = resultMetaData.getColumnCount();
String resultRow = "";
for (int i = 1; i < cols; i++) {
resultRow += resultMetaData.getColumnName(i) + ";";
}
System.out.println(resultRow);
while (results.next()) {
resultRow = "";
for (int i = 1; i < cols; i++) {
try {
resultRow += results.getString(i) + ";";
} catch (NullPointerException e) {
System.out.println(e.getMessage());
}
}
System.out.println(resultRow);
}
} catch (Exception e) {
System.out.println("query exception");
} finally {
results.close();
}
}
}
補充高級內容
關于調用SQLServer存儲過程的例子:
CREATE PROCEDURE [dbo].[sp_getStudentByName](@name char(10))
AS
Select * from Students where [Name]=@name
GO
DbObject DbO = new DbObject(new SqlServerConnectionFactory("localhost",
1433, "demo", "sa", ""));
Connection con = DbO.getConnection();
CallableStatement pstmt = null;
System.out.println("TestDB1()............");
/* try {
pstmt = con.prepareCall("{call sp_getStudentById(?)}");
pstmt.setInt(1, 1);
}*/
try {
pstmt = con.prepareCall("{call sp_getStudentByName(?)}"); //注意參數如何傳遞
pstmt.setString(1, "Tom");
}
……
使用輸出參數:
CREATE PROCEDURE [dbo].[sp_insertStudent](@name char(10),@age int,@id int OUTPUT) AS
insert into Students([Name],[Age]) values (@name,@age)
select @id=@@IDENTITY
GO
try {
pstmt = con.prepareCall("{call sp_insertStudent(?,?,?)}");
pstmt.setString(1, "zengqingsong");
pstmt.setInt(2, 22);
pstmt.registerOutParameter(3, Types.INTEGER);
pstmt.executeUpdate();
int id = pstmt.getInt(3);
System.out.println(id);
}
使用返回參數的例子:
CREATE PROCEDURE [dbo].[sp_insertStudent](@name char(10),@age int,@id int OUTPUT) AS
insert into Students([Name],[Age]) values (@name,@age)
select @id=@@IDENTITY –測試輸出參數
return 30 –測試返回30
GO
try {
pstmt = con.prepareCall("{?=call sp_insertStudent(?,?,?)}");
pstmt.setString(2, "zengqingsong");
pstmt.setInt(3, 22);
pstmt.registerOutParameter(4, Types.INTEGER);
pstmt.registerOutParameter(1, Types.INTEGER);
int ret = pstmt.executeUpdate(); //執行影響的行數
int ret2 = pstmt.getInt(1); //返回參數
int id = pstmt.getInt(4); //輸出參數
System.out.println(ret);
System.out.println(ret2);
System.out.println(id);
我想知道什么是數據庫?:

什么是數據庫

文章插圖
【什么是數據庫】數據庫本身就好比一個“大池”,你把它裝滿水,他就是“水池”,裝滿油就是“油池”,裝滿沙子就是“沙池” 。它就是個容器,數據的容器,至于往里面裝什么數據,怎么裝,那就要看設計“某方面功能的數據庫”的人怎么設計了 。
底層的數據庫也就是“池子”是一樣的,但是怎么把數據放進去,那就是要看怎么設計了 。
比如,為了增加可玩性,我可以吧水都裝在氣球中然后再把氣球放進池子類似這種,再比如我不直接放水,而是放冰,還可以是只放某一種類型的冰,比如正方形的冰等等 。
也就是說在底層數據庫的基礎上,怎么放置數據這也是很多人說的數據庫的設計 。

推薦閱讀