create table的默认值语法错误

时间:2014-08-08 14:28:20

标签: java android sqlite

我已经搜索了答案,到目前为止没有运气。

我正试图在Android Kit Kat的SQLite中运行一个语句,并得到以下堆栈跟踪:

08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): Error while trying to create table:settings
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): android.database.sqlite.SQLiteException: near "/": syntax error (code 1): , while compiling: CREATE TABLE settings (
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532):   id CHAR(36) PRIMARY KEY,
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532):   row_id TINYINT(1) NOT NULL DEFAULT 1,
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532):   device_id CHAR(36) DEFAULT NULL,
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532):   username VARCHAR(100) NOT NULL,
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532):   password VARCHAR(45) NOT NULL,
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532):   timezone VARCHAR(64),
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532):   timezones_updated TINYINT(1) NOT NULL DEFAULT 0,
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532):   device_bluetooth_identifier VARCHAR(64),
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532):   log_debug TINYINT(1),
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532):   gps_interval INTEGER NOT NULL DEFAULT 3,
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532):   gps_threshold FLOAT NOT NULL DEFAULT 50,
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532):   gps_trigger_speed FLOAT NOT NULL DEFAULT 2,
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532):   checkin_interval INTEGER NOT NULL DEFAULT 2,
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532):   checkin_timeout LONG NOT NULL DEFAULT 20,
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532):   gps_submission_interval INTEGER NOT NULL DEFAULT 20,
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532):   gps_timeout LONG NOT NULL DEFAULT 20,
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532):   log_file TEXT NOT NULL DEFAULT ''/storage/sdcard0/AIR.log'',
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532):   webservice_url TEXT NOT NULL DEFAULT ''http://air-test.corrisoft.com/webservices'',
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532):   log_pattern TEXT NOT NULL DEFAULT ''%date | %-5level | %thread | %logger{0} | %msg%n'',
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532):   phone_callcenter VARCHAR(10) NOT NULL DEFAULT ''8553500526''
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532): );
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532):   at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532):   at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532):   at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532):   at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532):   at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532):   at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532):   at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1663)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532):   at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1594)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532):   at test.corrisoft.InMemoryDatabase.execSQL(InMemoryDatabase.java:29)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532):   at com.corrisoft.air.db.AirDatabaseAdapter.checkTable(AirDatabaseAdapter.java:125)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532):   at com.corrisoft.air.db.AirDatabaseAdapter.updateDatabaseToMatchDefinition(AirDatabaseAdapter.java:110)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532):   at com.corrisoft.air.app.SettingsDAO.<init>(SettingsDAO.java:133)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532):   at com.corrisoft.air.app.SettingsDAOTest$1.<init>(SettingsDAOTest.java:26)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532):   at com.corrisoft.air.app.SettingsDAOTest.setUp(SettingsDAOTest.java:26)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532):   at junit.framework.TestCase.runBare(TestCase.java:132)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532):   at junit.framework.TestResult$1.protect(TestResult.java:115)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532):   at junit.framework.TestResult.runProtected(TestResult.java:133)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532):   at junit.framework.TestResult.run(TestResult.java:118)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532):   at junit.framework.TestCase.run(TestCase.java:124)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532):   at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:190)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532):   at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:175)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532):   at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555)
08-08 10:23:27.899: E/com.corrisoft.air.db.AirDatabaseAdapter(32532):   at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1584)

无论我首先放入哪个字符串文字,都会出现问题,所以这不是问题。想法?

1 个答案:

答案 0 :(得分:1)

将双引号''替换为常规单引号'

在SQL中,字符串文字位于'single quotes'中。在字符串文字中,您可以将'转义为'',但在字符串文字之外,双引号是语法错误。