2017-08-19 5 views
3

golangプログラムでユーザーが選択したsqliteデータベースへの接続を開きます。それらが存在しないファイルへのパスを提供する場合、ファイルを作成する代わりにエラーをスローしたいと思います。golangに不足しているデータベースファイルを作成する代わりに、sqliteにエラーを出力するにはどうすればよいですか?

私はmattn/gp-sqlite3ドライバを使用しています。私が見る限り、ドキュメントにはこの機能は記載されていません。

  • sqlite C documentationにはクエリ文字列の形式が記述されていますが、対象ファイルは存在しません。
  • C# connection stringsFailIfMissingオプションを持っていますが、異なる形式です。

これはMake SQLite connection fail if database is missing? (deleted/moved)と同じですが、C#の代わりにゴランです。 golangドライバはC#ドライバへの接続を記述するために別のフォーマットを使用しているようですので、そこの答えがgolangに変換されるかどうかわかりません。

答えて

5

現在、go-sqlite3ライブラリではこれはできません。 Looking at the source、あなたはSQLITE_OPEN_CREATEは常にオープン関数に渡され見ることができます。

rv := C._sqlite3_open_v2(name, &db, 
    C.SQLITE_OPEN_FULLMUTEX| 
     C.SQLITE_OPEN_READWRITE| 
     C.SQLITE_OPEN_CREATE, 
    nil) 

私は、このような機能を追加するために、パッケージ上であなたにopen a ticketをお勧めします。

あなたのDBを作成する前に、その間に、あなたは(あなたはまだ、ライブラリ自体にこの機能を要求しなければならない理由である、競合状態が存在することに注意してください)次のコードを追加することができます。

_, err := os.Stat("db.sqlite3") 
if os.IsNotExist(err) { 
    panic("database doesn't exist") 
} 
// TODO: create db 
関連する問題