我尝试在android中使用HTML在SQLite中创建表,但它不起作用。
示例 HTML:
<!doctype html>
<html>
<head>
<title>Contact Example</title>
<script
type="text/javascript"
charset="utf-8"
src="phonegap-1.0.0.js"
></script>
<script type="text/javascript" charset="utf-8">
// Wait for PhoneGap to load
//
//document.addEventListener("deviceready", onDeviceReady, false);
// PhoneGap is ready
//
function onDeviceReady() {
var db = openDatabase("Database", "1.0", "PhoneGap Demo", 200000);
db.transaction(populateDB, errorCB, successCB);
}
// Populate the database
//
function populateDB(tx) {
tx.executeSql("DROP TABLE IF EXISTS DEMO");
tx.executeSql("CREATE TABLE IF NOT EXISTS DEMO (id unique, data)");
tx.executeSql('INSERT INTO DEMO (id, data) VALUES (1, "First row")');
tx.executeSql('INSERT INTO DEMO (id, data) VALUES (2, "Second row")');
}
// Transaction error callback
//
function errorCB(tx, err) {
alert("Error processing SQL: " + err);
}
// Transaction success callback
//
function successCB() {
alert("success!");
}
</script>
</head>
<body onload="onDeviceReady()">
<h1>Example</h1>
<p>Database</p>
</body>
</html>
我看不到在 android 2.2 中创建的任何数据库。
我认为您的数据库是在android的缓存目录中创建的,这就是为什么无法看到它的原因。因此使用WebView的设置方法并启用缓存也将WebView的SQLite数据库路径提供给您的缓存目录,然后使用您的数据库。
创建一个
WebView
,
获取
webSettings
,并设置数据库路径。该路径应该是您的数据库的路径,即/path/path/your_package_name/
。
appView.setWebChromeClient(new WebClient(this));
WebSettings settings = appView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setJavaScriptCanOpenWindowsAutomatically(true);
settings.setDatabaseEnabled(true);
settings.setDatabasePath("/data/data/<database path>/app_database");
创建一个
WebChromeClient
,并重写 onExceededDatabaseQuota
方法。这是在您第一次打开应用程序时调用的,因为最初没有数据库设置。这允许您在 Java 中设置配额。由于这是一个测试代码,我只是在此处输入任意值。
final class WebClient extends WebChromeClient {
Context mCtx;
WebClient(Context ctx)
{
mCtx = ctx;
}
public void onExceededDatabaseQuota(String url, String databaseIdentifier,
long currentQuota, long estimatedSize,
long totalUsedQuota,WebStorage.QuotaUpdater quotaUpdater)
{
Log.d(LOG_TAG, "We exceeded the quota");
quotaUpdater.updateQuota(100000);
}
}
欲了解更多详情:
在已取得 root 权限的设备上,转到:
这里“app_databases”包含“Databases.db”文件,该文件包含其他数据库文件。
WebView具有通过javascript代码调用java代码的能力。尝试这个解决方案怎么样?