package org.nutz.dao.impl; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties; import java.util.logging.Logger; import javax.sql.DataSource; import org.nutz.lang.Lang; import org.nutz.log.Log; import org.nutz.log.Logs; /** * 这是一个神奇的DataSource!!你甚至不需要设置driverClassName!! * <p>把用户名,密码,jdbcURL设置一下,这个类就能用了!! * <p>当然,你在你的 CLASSPATH 下要放置相应的数据库驱动 jar 包 * * @author wendal(wendal1985@gmail.com) */ public class SimpleDataSource implements DataSource { private static final Log log = Logs.get(); protected String username; protected String password; protected String driverClassName; protected String jdbcUrl; public SimpleDataSource() { log.warn("SimpleDataSource is NOT a Connection Pool, So it is slow but safe for debug/study"); } /** * 这是唯一会被NutDao调用的方法 */ public Connection getConnection() throws SQLException { Connection conn; if (username != null) conn = DriverManager.getConnection(jdbcUrl, username, password); else conn = DriverManager.getConnection(jdbcUrl); return conn; } public void close() {} public void setDriverClassName(String driverClassName) throws ClassNotFoundException { Lang.loadClass(driverClassName); } public void setUsername(String username) { this.username = username; } public void setPassword(String password) { this.password = password; } public void setJdbcUrl(String jdbcUrl) { this.jdbcUrl = jdbcUrl; } //加载Nutz所支持的数据库的驱动!! static { String[] drivers = {"org.h2.Driver", "com.ibm.db2.jcc.DB2Driver", "org.hsqldb.jdbcDriver", "oracle.jdbc.OracleDriver", "org.postgresql.Driver", "net.sourceforge.jtds.jdbc.Driver", "com.microsoft.sqlserver.jdbc.SQLServerDriver", "org.sqlite.JDBC", "com.mysql.jdbc.Driver", "com.beyondb.jdbc.BeyondbDriver"}; for (String driverClassName : drivers) { try { Class.forName(driverClassName); } catch (Throwable e) {} } } //--------------------------------------------------------------- public PrintWriter getLogWriter() throws SQLException { throw Lang.noImplement(); } public void setLogWriter(PrintWriter out) throws SQLException { throw Lang.noImplement(); } public void setLoginTimeout(int seconds) throws SQLException {throw Lang.noImplement();} public int getLoginTimeout() throws SQLException { throw Lang.noImplement(); } public <T> T unwrap(Class<T> iface) throws SQLException { throw Lang.noImplement(); } public boolean isWrapperFor(Class<?> iface) throws SQLException { throw Lang.noImplement(); } public Connection getConnection(String username, String password) throws SQLException { throw Lang.noImplement(); } public Logger getParentLogger() { throw Lang.noImplement(); } public static DataSource createDataSource(Properties props) { SimpleDataSource sds = new SimpleDataSource(); sds.setJdbcUrl(props.getProperty("url", props.getProperty("jdbcUrl"))); sds.setPassword(props.getProperty("password")); sds.setUsername(props.getProperty("username")); return sds; } }