動態資料庫
⑴ 如何在資料庫動態建表
動態建表首先需要了解Statement類
Statement 對象用 Connection 的方法createStatement 創建,例如
//創建連接對象
Connection connection = DBUtil.getConnection();
//創建Statement對象
Statement statement=connection.createStatement();
創建完之後通過執行以sql語句為參數的Statement的方法,來執行sql語句完成對資料庫的操作。
Statement共有三種方法,分別是 executeQuery、executeUpdate 和execute。
方法 executeQuery 用於產生單個結果集的語句,例如 SELECT 語句。
方法 executeUpdate 用於執行 INSERT、UPDATE 或 DELETE 語句以及 SQLDDL(數據定義語言)語句,例如 CREATE TABLE 和 DROP TABLE。INSERT、UPDATE 或 DELETE語句的效果是修改表中零行或多行中的一列或多列。executeUpdate 的返回值是一個整數,指示受影響的行數(即更新計數)。對於CREATE TABLE 或 DROP TABLE 等不操作行的語句,executeUpdate 的返回值總為零。如果沒有進行操作就返回-1。
方法 execute用於執行返回多個結果集、多個更新計數或二者組合的語句,我們不會需要該高級功能,所以本概述就不進行介紹了。
動態建表實例:
String tablename="WrongExpression";
sql = "create table "+tablename+"(time varchar(255),expression varchar(20),result varchar(20))";
int result = stmt.executeUpdate(sql);// executeUpdate語句會返回一個受影響的行數,如果返回-1就沒有成功
⑵ 動態資料庫的什麼是動態鏈接庫
動態鏈接庫(Dynamic Link Library 或者 Dynamic-link Library,縮寫為 DLL),是微軟公司在微軟Windows操作系統中,實現共享函數庫概念的一種方式。這些庫函數的擴展名是 」.dll"、".ocx"(包含ActiveX控制的庫)或者 ".drv"(舊式的系統驅動程序)。
動態鏈接提供了一種方法,使進程可以調用不屬於其可執行代碼的函數。函數的可執行代碼位於一個 DLL 文件中,該 DLL 包含一個或多個已被編譯、鏈接並與使用它們的進程分開存儲的函數。DLL 還有助於共享數據和資源。多個應用程序可同時訪問內存中單個 DLL 副本的內容。
使用動態鏈接庫可以更為容易地將更新應用於各個模塊,而不會影響該程序的其他部分。例如,您有一個大型網路游戲,如果把整個數百MB甚至數GB的游戲的代碼都放在一個應用程序里,日後的修改工作將會十分費時,而如果把不同功能的代碼分別放在數個動態鏈接庫中,您無需重新生成或安裝整個程序就可以應用更新。
⑶ 動態資料庫
動態連接庫,英文全稱是Dynamic Link Library (DLL),它是Microsoft Windows 和 OS/2的一個特性,它把一般用於特殊函數或函數集的可執行程序單獨作為文件存放(擴展名為DLL),只在程序裝入時或者在運行時與程序結合,而不是在程序編譯連接時,從而可以同時被若干應用程序共享。
⑷ 在.NET 中怎麼動態連接不同資料庫
應用工廠模式.把資料庫聯接作介面.再用點反射
給一小段代碼參考
public DbDriver()
{
// 獲取程序集名稱
assemblyName = ConfigurationManager.AppSettings["AssemblyName"];
// 獲取默認構造器名稱
constructor = ConfigurationManager.AppSettings["Constructor"];
}
public IDataTask DriveLWordTask()
{
// 建立 IDataTask 對象實例
return (IDataTask)Assembly.Load(assemblyName).CreateInstance(constructor, false);
}
assemblyName是某種具體資料庫連接方式的程序集名.改變配置中的程序集名即得到不同的連接方式,不明白就先看下工廠模式
⑸ 一個動態的網站怎麼建後台資料庫怎麼弄
網站前台和網站後台是網站建設中常問道的一個問題,這兩個概念通常是相對於動態網站而言,即網站建設是基於資料庫開發的網站。
基於帶資料庫開發的網站,一般分網站前台和網站後台,網站前台是面向網站訪問用戶的,通俗的說也就是給訪問網站的人看的內容和頁面,網站前台訪問可以瀏覽公開發布的內容,如產品信息、新聞信息、企業介紹、企業聯系方式、提交留言等操作,管理可以通過密碼進到後台的網頁,來發布新聞、查看留言等操作。
網站後台,有時也稱為網站管理後台,是指用於管理網站前台的一系列操作,如:產品、企業信息的增加、更新、刪除等。通過網站管理後台,可以有效的管理網站供瀏覽者查閱的信息。網站的後台通常需要帳號及密碼等信息的登陸驗證,登陸信息正確則驗證而後進入網站後台的管理界面進行相關的一系列操作。
當然,前台和後台都是程序人員做的開發的網站頁面,通常開發帶網站管理後台功能的網站空間必須支持程序語言和數據開發功能。
具體設計到 編程語言 和 資料庫 這兩方面的具體知識不是文字解答這么簡單的。你需要去書店,買相關的教程書來學習一個足夠久的時間才能解決了。
⑹ 如何設計動態欄位的產品資料庫表
可以採用四種技術:
動態增加資料庫表欄位
預留足夠的空白欄位,運行時作動態影射
用xml格式保存在單欄位里
改列為行,用另外一個表存放定製欄位
【一】
現在我們來分析一下四種技術的優劣,不過首先可以排除的是第一點動態增加欄位的方法,因為在實際操作時候幾乎是不可能的(sqlserver太慢,oracle索性不支持),基本可以不討論就排除。剩下後三點。
【二】
先來討論預留空白欄位的方法,基本原理就是在資料庫表設計的時候加入一些多餘的欄位,看下面的代碼:
CREATE TABLE Sample(
name varchar(12),
field0 varchar(1),
field1 varchar(1),
fieldN varchar(1)
}
然後看實際運行時候的需要,動態分配欄位給系統使用,也許需要一個這樣的結構來描述分配情況:
public class Available
{
public int CurrentUnusedFieldNumber;
public Hashtable FieldToRealName;
}
也許某一時刻的數據狀況是這樣的: CurrentUnusedFieldNumber=3,
哈西表FieldToRealName包含內容是("field0"="SomeId", "field1"="AnyName",
"field2=IsOk")
現在的問題是如果要配合Hibernate,如何來處理?以上段的數據使用狀況為例子,如果我們的類定義是這樣:
public class Entity01
{
public string Name;
public string SomeId;
public string AnyName;
public bool IsOk;
}
也許只需要修改一下xxx.hbm.xml,把 SomeId 和 field0
做成對應就ok了。但是在運行時我們怎麼知道會有這樣的類定義?除非我們做動態代碼生成,自動編譯也許可以,但是問題也許就到其他方面去了;如果我們不用動態定義,那麼類就只能是這樣:
public class Entity01
{
public string Name;
public Hashtable ExtraFieldAndValues;
}
使用的時候,用 entity01.ExtraFieldAndValues.setValue("AnyName", "boss")
的方式來引用,也許這樣是修改最少的了,但是問題是Hibernate不支持這樣的方法。
【三】
再來討論單欄位存儲的方法,我們使用這樣的資料庫表定義
CREATE TABLE Sample
(
Name varchar(12),
Xml CLOB(102400) // 僅作說明而已
)
然後對應這樣的類定義
public class Entity01
{
public string Name;
public string Xml;
public Hashtable ExtraNameAndValueFromXml;
}
我們的代碼就可以這樣使用:string id =
entity01.ExtraNameAndValueFromXml.getValue("SomeId")
了。這樣解決看起來很不錯,不僅不需要Available表,而且看起來Hibernate對它的支持也很完美,但是致命的問題在於:如果保持高效的查詢?除非資料庫系統本身對此有支持,否則就只能用低效的substring或者like做查詢,這在大批量數據中根本就不可行。
是不是折衷一下,把兩種方法的優點和起來?問題有來了:怎麼保持兩者之間數據的同步?難道要我們用存儲過程去解析xml內容?
所以,一個兩難的問題,需要我們認真去解決。我們通過認真的需求分析,也許可以減少可變欄位的數量,但是只要有一個可變欄位或者可變的可能性存在,我們始終要去解決這個兩難的問題。
期待繼續討論。
【四】
還有一種方法就是改列為行,用另外一個表存放擴展欄位,定義可以如下:
CREATE
TABLE SampleFields
(
idSample Integer,
fieldName varchar(30),
fieldValue varchar(100)
)
其中idSample關聯到Sample表的id欄位(我沒有寫出來)。這樣的話,Hibernate很容易支持,也可以支持Sql的查詢,而且可以支持把內容放到Hashtable中去,看起來是目前最好的方式了。但是在大容量數據的時候,SampleFields表的數據會是主表數據量的N倍(看定製的欄位數目多少而定),同樣存在有很嚴重的性能問題。
⑺ 動態網頁怎樣連接資料庫
這個問題問的太寬泛
jdbc, hibernate都可以啊 hibernate也是封裝了jdbc的 用起來更方便點
隨便貼個jdbc連接SQL的例子吧
JSP連接SQL Server7.0/2000資料庫
testsqlserver.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="Java.sql.*"%>
<html>
<body>
<%Class.forName("com.microsoft.JDBC.sqlserver.SQLServerDriver").newInstance();
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs";
//pubs為你的資料庫的
String user="sa";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一個欄位內容為:<%=rs.getString(1)%>
您的第二個欄位內容為:<%=rs.getString(2)%>
<%}%>
<%out.print("資料庫操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
⑻ 什麼是動態資料庫
DLL文件格式的就是
⑼ SQL 怎麼USE 動態資料庫
資料庫中可能存在多個Database,如默認的model,master等 在圖形化查詢界面中,你可以在快捷菜單欄中選擇要操作的資料庫,也可以使用命令進行操作 樓上的yiyishuitian已經給出了答案 舉個栗子: use master; go select * from dbo.spt_values;
⑽ 為什麼不能與動態資料庫連接
//動態庫和普通進程調用資料庫方式沒有任何區別,以下的程序兼容WINDOWS ODBC資料庫連接和LINUX MYSQL連接,是跨平台的。
#ifdef WIN32
#include <windows.h>
#include <odbcinst.h>
#include <sqlext.h>
#else
#include <mysql.h>
#include <unistd.h>
#define SQLHANDLE static MYSQL
#endif
#include <stdarg.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
SQLHANDLE hDBEnv, hDBC;
int DB_Open(char * dbcn, char * usr, char * pwd)
{
int r;
#ifdef WIN32
r = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hDBEnv);
if(r) return 0;
r = SQLSetEnvAttr(hDBEnv,SQL_ATTR_ODBC_VERSION,
(void*)SQL_OV_ODBC3,0);
if(r) return 0;
r = SQLAllocHandle(SQL_HANDLE_DBC, hDBEnv, &hDBC);
if(r) return 0;
r = SQLConnect(hDBC,
(unsigned char *)dbcn, strlen(dbcn),
(unsigned char *)usr, strlen(usr),
(unsigned char *)pwd, strlen(pwd));
return r==SQL_SUCCESS || r==SQL_SUCCESS_WITH_INFO;
#else
mysql_init(&hDBC);
MYSQL * rx = mysql_real_connect(
&hDBC, dbcn, usr, pwd, NULL, 0, NULL, 0);
if(!rx) return 0;
return 1;
#endif
}//end DB_Open
int DB_Exec(char * sql)
{
#ifdef WIN32
SQLHANDLE hStatement = NULL;
SQLAllocHandle(SQL_HANDLE_STMT, hDBC, &hStatement);
SQLExecDirect(hStatement,(unsigned char *)sql, strlen(sql));
SQLCloseCursor(hStatement);
SQLFreeHandle(SQL_HANDLE_STMT, hStatement);
hStatement = NULL;
#else
mysql_real_query (&hDBC, sql, strlen(sql));
#endif
return 1;
}//end DB_Exec
int DB_Close(void)
{
#ifdef WIN32
SQLDisconnect(hDBC);
SQLFreeHandle(SQL_HANDLE_DBC, hDBC);
SQLFreeHandle(SQL_HANDLE_ENV, hDBEnv);
#else
mysql_close(&hDBC);
#endif
return 1;
}//DB_Close()
#ifndef WIN32
typedef struct tagMySQLRecordset {
MYSQL_RES * hRecord;
void * * row;
int * size;
int cols;
} MYSQLRecordset;