JDBC连接支持哪些参数?
JDBC连接字符串不仅包括连接信息,而且还支持数据库的一些关键词设置。在DBMaster中,连接字符串目前支持的关键词有:UID, PWD, SVADR, PTNUM, ATCMT, CTIMO, DIFCO, STRSZ, STROP, DSCMT, ERRLCODE, CLILCODE。
LTIMO(5.4.3 #29936, 20200708)
以下将介绍如何设置JDBC连接字符串,并给出简单的例子来说明这些关键词的用法:
JDBC连接字符串:
URL=" jdbc:dbmaster://127.0.0.1:2453/DBSAMPLE5;uid=sysadm;pwd=abc; atcmt=1; strsz=1000; strop=1; dscmt=1; errlcode=JA; clilcode=Shift-JIS;”
Conn = DriverManager.getConnection (URL);
例如:
UID, PWD
Write UID and PWD in URL string and getConnection (url) by url one parameter. Program connects to database successfully by this way.
Test Program:
public class KeyWords {
static String driver ="dbmaster.sql.JdbcOdbcDriver";
static String url = "jdbc:dbmaster://127.0.0.1:2453/DBSAMPLE5;uid=sysadm;pwd=;";
public static void main(String[] args) throws SQLException, ClassNotFoundException {
Class.forName (driver);
Connection conn = DriverManager.getConnection (url);
try{
System.out.print ("Connect Successful!");
}
catch (Exception e){
e.getStackTrace ();
}
}
}
ATCMT:通过getAutoCommit ()函数,可获知自动提交模式的状态。
测试程序:
public class KeyWords {
static String driver ="dbmaster.sql.JdbcOdbcDriver";
static String url = "jdbc:dbmaster://127.0.0.1:2453/DBSAMPLE5;ATCMT = 0;";
public static void main(String[] args) throws SQLException, ClassNotFoundException {
Class.forName (driver);
Connection conn = DriverManager.getConnection (url, "SYSADM", "");
try{
Boolean i = conn.getAutoCommit ();
System.out.print("AUTO-Commit-STAUS:"+i+"\n");
}
catch (Exception e){
e.getStackTrace ();
}
}
}
Step (1): Set ATCMT = 0 in url
Result in Console:
AUTO-Commit-STAUS:false
Step (2): Set ATCMT = 1 in url in above program.
Result in console:
AUTO-Commit-STAUS:true
DSCMT:这个关键词定义了应用程序断开数据库时是否提交事务。
测试程序:
public class KeyWords {
static String driver ="dbmaster.sql.JdbcOdbcDriver";
static String url = "jdbc:dbmaster://127.0.0.1:2453/DBSAMPLE5;ATCMT = 0;DSCMT = 0;";
public static void main(String[] args) throws SQLException, ClassNotFoundException {
Class.forName(driver);
Connection conn = DriverManager.getConnection (url, "SYSADM", "");
try{
Boolean i = conn.getAutoCommit ();
System.out.print("AUTO-Commit-STAUS:"+i+"\n");
Statement stmt = conn.createStatement ();
int effctCount = stmt.executeUpdate("UPDATE jobs SET JOB_DESC='Snow,Modify,Dbmaster-test' WHERE JOB_ID = 1");
System.out.println ("The Modified Rows Count is :"+effctCount+"\n");
ResultSet rs = stmt.executeQuery ("select * from jobs");
rs.next ();
String s1= rs.getString (1);
String s = rs.getString ("JOB_DESC");
System.out.print ("The Modified\nJOB_ID:"+s1+"JOB_DESC:"+s);
}
catch (SQLException e){
e.getStackTrace ();
}
}
Step (1): DB_DSCMT keyword act on auto-commit off status, DBMaster decides to whether execute commit command when a client's application issues a SQLDisconnect.so we should set ATCMT = 0 before test keyword DSCMT.
URL = "jdbc:dbmaster://127.0.0.1:2453/DBSAMPLE5;ATCMT = 0; DSCMT = 0;”
Step (2): Execute UPDATE statement in AP and Query the result from DBSAMPLE5 to examine the modified result whether affected in database.
Step (3): Query the result from dmSQL and we will find the new data which modified via AP can’t affect in database. This proves DSCMT = 0 is an available setting in URL.
dmSQL> select * from jobs where JOB_ID = 1;
JOB_ID JOB_DESC MIN_LVL MAX_LVL
=========== ================================================== =======
1 New Hire - Job not specified 10 10
Step (4): set DSCMT=1, execute STEP (2) and STEP (3) again. We will find the new data which modified via AP had been affected in database too. This proves DSCMT = 1 is an available setting in URL.
dmSQL> select * from jobs;
JOB_ID JOB_DESC MIN_LVL MAX_LVL
=========== ================================================== =======
1 Snow, Modify, Dbmaster-test 10 10
ERRLCODE: 用户可以将ERRLCODE设置为en、ja、zh_TW、zh_CN、UTF-8等DBMaster支持的编码。
测试程序:通过函数GETSYSINFO ()可以获取ERRLCODE错误信息字符集。
public class KeyWords {
static String driver ="dbmaster.sql.JdbcOdbcDriver";
static String url = "jdbc:dbmaster://127.0.0.1:2453/DBSAMPLE5;ERRLCODE =zh_CN;";
public static void main(String[] args) throws SQLException, ClassNotFoundException {
Class.forName (driver);
Connection conn = DriverManager.getConnection (url, "SYSADM", "");
try {
Statement stmt = conn.createStatement ();
ResultSet rs = stmt.executeQuery ("SELECT GETSYSINFO ('errlcode')");
rs.next ();
String s = rs.getString (1);
System.out.print ("ERRLCODE:"+s);
Step (1): set ERRLCODE =zh_CN in url.
Restlt in console:
ERRLCODE:zh_CN
Step (2): set ERRLCODE =en in URL.
Restlt in console:
ERRLCODE:en
CLILCODE:此关键词指定客户端的数据库字符集编码。当使用多语言数据库并且数据库服务器端的LCODE设置为UTF-8时,客户端可以使用任意本地编码连接该UTF-8数据库服务器,DBMaster支持的编码有BIG5、 EUC-JP、UTF-8等。但是,如果服务器端LCODE没有设置为UTF-8,客户端的CLILCODE值必须与服务器端LCODE编码相同。
测试程序:使用上面测试关键词ERRLCODE的测试程序,只需在该程序上做以下更改:
用“ResultSet rs = stmt.executeQuery ("SELECT GETSYSINFO ('clilcode')")代替测试程序的“ResultSet rs = stmt.executeQuery ("SELECT GETSYSINFO ('errlcode')"。
用CLICODE = EUC-JP OR CLILCODE=GBK代替ERRLCODE (ERRLCODE=zh_CN)的URL。
Step (1) set CLILCODE = EUC-JP in url, url = "jdbc:dbmaster://127.0.0.1:2453/DBSAMPLE5;CLILCODE =EUC-JP;";
Result in console:
CLILCODE: EUC-JP
Step (2) set CLILCODE = GBK, url = "jdbc:dbmaster://127.0.0.1:2453/DBSAMPLE5;CLILCODE =GBK;";
Result in console:
CLILCODE: GBK
STROP:此关键词定义在进行字符串连接操作时是否删除字符串尾部空格。值为0,表示在执行字符串连接操作前保留CHAR类型数据尾部的空格;值为1,表示在执行字符串连接前删除其尾部空格。
测试程序:使用以上测试关键词ERRLCODE的测试程序,只需在该程序上做以下更改:
使用“ResultSet rs = stmt.executeQuery ("SELECT CONCAT ('aaa','bbbb')")代替测试程序的“ResultSet rs = stmt.executeQuery ("SELECT GETSYSINFO ('errlcode')");”。
使用 STROP = 0 or STROP = 1代替ERRLCODE (ERRLCODE=zh_CN)的URL。
Step (1): set STROP=0 in URL: url = "jdbc:dbmaster://127.0.0.1:2453/DBSAMPLE5;STROP=0";
Result in Console:
aaa bbbb
Step (2): set STROP=1 in URL: url = "jdbc:dbmaster://127.0.0.1:2453/DBSAMPLE5;STROP=1";
Result in console:
Aaabbbb