package jef.database;
import javax.persistence.PersistenceException;
import jef.database.dialect.AbstractDialect;
import jef.database.dialect.DatabaseDialect;
import jef.tools.Assert;
/**
* 描述数据库连接的基本信息
* @author Administrator
*
*/
public class ConnectInfo {
// 三项基本信息
String url;
String user;
String password;
// 三项高级信息
DatabaseDialect profile;
String dbname;
String host;
/**
* 获得JDBC地址
* @return
*/
public String getUrl() {
return url;
}
/**
* 设置地址
* @param url
*/
public void setUrl(String url) {
this.url = url;
}
/**
* 获得用户名
* @return
*/
public String getUser() {
return user;
}
/**
* 设置用户名
* @param user
*/
public void setUser(String user) {
this.user = user;
}
/**
* 获得口令
* @return
*/
public String getPassword() {
return password;
}
/**
* 设置口令
* @param password
*/
public void setPassword(String password) {
this.password = password;
}
/**
* 获得方言
* @return database dialect
*/
public DatabaseDialect getProfile() {
return profile;
}
/**
* 设置方言
* @param profile
*/
public void setProfile(AbstractDialect profile) {
this.profile = profile;
}
/**
* 获得数据库名
* @return 数据库名
*/
public String getDbname() {
return dbname;
}
/**
* 设置数据库名
* @param dbname
*/
public void setDbname(String dbname) {
if(profile!=null){
dbname=profile.getObjectNameToUse(dbname);
}
this.dbname = dbname;
}
/**
* 获得数据库地址
* @return
*/
public String getHost() {
return host;
}
/**
* 设置数据库地址
* @param host
*/
public void setHost(String host) {
this.host = host;
}
@Override
public String toString() {
StringBuilder sb=new StringBuilder();
sb.append("type=").append(profile!=null?profile.getName():null);
sb.append("\thost=").append(host);
sb.append("\tdb=").append(dbname);
return sb.toString();
}
/**
*
* 目前已知的所有JDBC URL开头和驱动之间的关系
* jdbc:derby org.apache.derby.jdbc.EmbeddedDriver
* jdbc:mysql com.mysql.jdbc.Driver
* jdbc:oracle oracle.jdbc.driver.OracleDriver
* jdbc:microsoft com.microsoft.jdbc.sqlserver.SQLServerDriver
* jdbc:sybase:Tds com.sybase.jdbc2.jdbc.SybDriver
* jdbc:jtds net.sourceforge.jtds.jdbc.Driver
* jdbc:postgresql org.postgresql.Driver
* jdbc:hsqldb org.hsqldb.jdbcDriver
* jdbc:db2 COM.ibm.db2.jdbc.app.DB2Driver DB2的JDBC Driver十分混乱,这个匹配不一定对
* jdbc:sqlite org.sqlite.JDBC
* jdbc:ingres com.ingres.jdbc.IngresDriver
* jdbc:h2 org.h2.Driver
* jdbc:mckoi com.mckoi.JDBCDriver
* jdbc:cloudscape COM.cloudscape.core.JDBCDriver
* jdbc:informix-sqli com.informix.jdbc.IfxDriver
* jdbc:timesten com.timesten.jdbc.TimesTenDriver
* jdbc:as400 com.ibm.as400.access.AS400JDBCDriver
* jdbc:sapdb com.sap.dbtech.jdbc.DriverSapDB
* jdbc:JSQLConnect com.jnetdirect.jsql.JSQLDriver
* jdbc:JTurbo com.newatlanta.jturbo.driver.Driver
* jdbc:firebirdsql org.firebirdsql.jdbc.FBDriver
* jdbc:interbase interbase.interclient.Driver
* jdbc:pointbase com.pointbase.jdbc.jdbcUniversalDriver
* jdbc:edbc ca.edbc.jdbc.EdbcDriver
* jdbc:mimer:multi1 com.mimer.jdbc.Driver
* @return
*/
DatabaseDialect parse(){
Assert.notNull(url);
int start=url.indexOf("jdbc:");
if(start==-1){
throw new IllegalArgumentException("The jdbc url ["+url+"] cann't be recognized.");
}
int end=url.indexOf(':',start+5);
String dbType=url.substring(start+5,end);
profile=AbstractDialect.getProfile(dbType); //传入时会自动转为小写
if(profile==null){
throw new PersistenceException("database not supported:"+dbType);
}
if(url.length()>0)
profile.parseDbInfo(this);
return profile;
}
}