由于APPFOG上的免费主机,使得我们有能力0成本搭架移动APP和web站点服务器.
但是 免费的东西总是有诸多限制.比如数据库是在云服务器内部.外部只能通过SF隧道链接.而国内链接速度慢到令人发指.
并且数据库的链接地址 账号 密码 端口 只有在WEB服务器RunTime才能得到.
所以无法直接操作数据库.无法手动创建数据库 创建表.
怎么办? JDBC? 代码太多.开发成本高.hibernate? 那框架没有创建数据库的功能(网上的资料和一些J2EE的群友都问过了 没人知道怎么用hirbernate建立数据库).
没办法 只能两者结合起来用
下面是一些DEMO的代码.
package org.gl.db.hebernate.bean;
import java.io.File;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
public class test {
public static void main(String[] args) {
String dbName = "tv2";
creatDateBaseIfnoExist(dbName);
Session session;
Configuration config = null;
Transaction tx = null;
try {
File file = new File("src/Hibernate.cfg.xml");
config = new Configuration().configure(file);// 读取数据库连接的默认配置
config.setProperty("connection.driver_class",
"com.mysql.jdbc.Driver");
config.setProperty("connection.url", "jdbc:mysql://localhost:3306/"
+ dbName);// 动态的修改数据库的名称和地址
config.setProperty("hibernate.connection.url",
"jdbc:mysql://localhost:3306/" + dbName);// 这句非常重要,通过DEBUG得知Configuration读取默认配置后会内部复制connection.url到hibernate.connection.url这个参数,两个一并修改
config.setProperty("connection.username", "root");
config.setProperty("connection.password", "123456");
config.setProperty("connection.pool_size", "2");
config.setProperty("hibernate.dialect",
"org.hibernate.dialect.MySQLDialect");
config.setProperty("show_sql", "true");
config.setProperty("myeclipse.connection.profile", "mysql");
config.setProperty("hbm2ddl.auto", "update");
// config.setProperty("hibernate.connection.provider_class","org.hibernate.connection.ProxoolConnectionProvider");
ServiceRegistryBuilder mServiceRegistryBuilder = new ServiceRegistryBuilder()
.applySettings(config.getProperties());
ServiceRegistry resgistry = mServiceRegistryBuilder
.buildServiceRegistry();
SessionFactory sessionFactory = config
.buildSessionFactory(resgistry);
Program p = new Program();
session = sessionFactory.openSession();
tx = session.beginTransaction();
session.save(p);
tx.commit();
} catch (HibernateException e) {
e.printStackTrace();
try {
tx.rollback();
} catch (HibernateException e1) {
e1.printStackTrace();
}
} finally {
}
}
private static void creatDateBaseIfnoExist(String DBname) {
PreparedStatement ps = null;
try {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = (Connection) DriverManager.getConnection(
"jdbc:mysql://localhost:3306", "root", "123456");
ps = (PreparedStatement) conn.prepareStatement("CREATE DATABASE `"
+ DBname + "` CHARACTER SET utf8");
ps.execute();
ps.close();
} catch (ClassNotFoundException e) {
} catch (SQLException e) {
} finally {
}
}
}
hibernate 我用的4.1 .动态配置时会有很多蛋疼的奇怪的BUG.找不到类.不支持啥啥啥操作(80%的原因是hibernate不熟悉.其实只看了一个PDF教程).看源代码+DEBUG+百度+google 搞定他们吧.